# Project export: OmniMind

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: OpenAI Build Week
- Tagline: An AI operating system that understands your digital life and helps you decide what matters next.
- Devpost: https://devpost.com/software/omnimind-zvkjwl
- GitHub: https://github.com/0xKhushwant/OmniMind
- Demo: https://youtu.be/j8BqVoLLN94
- Video: https://www.youtube.com/embed/j8BqVoLLN94?enablejsapi=1&hl=en_US&rel=0&start=&version=3&wmode=transparent
- Team: 1 GitHub contributor(s) — Khushwant (2 commits)

## Devpost submission (written by the team)

### Overview

Every day, our work is scattered across emails, calendars, GitHub repositories, cloud storage, documents, notes, and messaging platforms. While each application stores valuable information, none of them understand how everything is connected. As a result, we spend more time searching for information than actually using it. Existing AI assistants can summarize documents or answer questions, but they still work in isolation and lack an understanding of our complete digital workspace. We wanted to build an AI that doesn't just retrieve information—it understands how information is connected. That idea became OmniMind. OmniMind is an AI operating system for your digital life. Instead of treating emails, documents, repositories, meetings, and files as isolated pieces of information, OmniMind connects them into a unified reasoning layer that understands relationships across your digital workspace. Users can ask natural language questions such as: "What should I work on today?" "Which deadlines am I most likely to miss?" "Show everything related to my indoor localization project." "Summarize discussions about my latest feature." "Generate today's work plan based on my meetings, emails, and pending tasks." Rather than simply returning search results, OmniMind explains why it recommends something by combining evidence from multiple sources, helping users make better decisions instead of just finding information. OmniMind combines OpenAI's reasoning capabilities with semantic search, vector embeddings, structured outputs, and a unified knowledge graph. Information from connected services is processed into embeddings, indexed in a vector database, and linked together to create a shared understanding of the user's digital workspace. When a question is asked, OmniMind retrieves relevant context from multiple sources, reasons across those relationships, and generates grounded, evidence-backed recommendations instead of isolated answers. The application was built using Next.js, React, TypeScript, Tailwind CSS, FastAPI, Python, Supabase, PostgreSQL, and pgvector, with OpenAI powering the reasoning experience. The biggest challenge wasn't connecting APIs—it was teaching the system to reason across thousands of disconnected pieces of information. Balancing retrieval quality, response speed, and contextual accuracy required multiple iterations of prompt design, semantic retrieval, ranking strategies, structured outputs, and reasoning workflows. Another challenge was designing an interface that makes sophisticated AI reasoning feel simple, transparent, and trustworthy through evidence-backed recommendations. We're proud that OmniMind goes beyond being another chatbot. Instead of simply answering questions, it understands relationships between projects, documents, meetings, repositories, and conversations to generate meaningful, explainable recommendations. We also built features like evidence-backed decision making, a unified action queue, activity timeline, connector management, and proactive automations that demonstrate how AI can become a true operating layer instead of another search interface. This project reinforced that retrieval alone isn't enough. The real value comes from reasoning. When AI understands relationships instead of isolated documents, it can uncover hidden connections, prioritize work intelligently, explain its recommendations, and help people make better decisions rather than simply returning information. Our long-term vision is to build the operating system for knowledge work. Future versions will integrate with Slack, Notion, Jira, Linear, Microsoft Teams, Discord, Google Workspace, Figma, and additional productivity platforms. We also plan to introduce proactive AI that continuously detects forgotten commitments, predicts missed deadlines, recommends next actions, and organizes a user's digital workspace without requiring manual prompts. Our goal is simple: Stop searching. Start understanding.

## README (from the GitHub repository)

# OmniMind

**AI Operating System for Your Digital Life**

OmniMind is a full-stack prototype that connects fragmented work context across email, calendars, documents, repositories, notes, and cloud storage into one AI reasoning layer.

Demo Video: https://youtu.be/j8BqVoLLN94

---

## Overview

Modern work is scattered across Gmail, GitHub, calendars, documents, notes, and cloud storage. Finding information is no longer the hardest problem. The harder problem is understanding how information across different tools connects.

OmniMind creates a reasoning layer across a user's digital life. It connects commitments, meetings, documents, repository activity, and knowledge graph relationships so users can decide what matters next with evidence behind every recommendation.

The current release is a reproducible OpenAI Build Week prototype. It includes deterministic demo services so judges can evaluate the full product flow without connecting private accounts, while preserving the architecture for live OAuth connectors, OpenAI Responses API orchestration, embeddings, and structured outputs.

## Core Features

- **AI Reasoning Chat**: Ask questions about your day, projects, people, documents, or repositories.
- **Context-Aware Recommendations**: Prioritizes work based on calendar timing, email commitments, project state, and repository risk.
- **Evidence-Backed Answers**: Responses include tools used, citations, and follow-up actions.
- **Knowledge Graph**: Shows relationships between people, projects, repositories, meetings, documents, and actions.
- **Action Queue**: Converts scattered context into prioritized next steps.
- **Daily Brief**: Summarizes important work, risks, and recommended focus areas.
- **Connector Hub**: Tracks provider readiness, scopes, sync status, and connected surfaces.
- **Activity Timeline**: Makes syncs, automations, drafts, graph expansion, and fallback behavior auditable.
- **Automation Workflows**: Runs proactive workflows for briefs, conflicts, promised replies, and repository risks.
- **Document Intelligence**: Uploads, chunks, searches, and answers questions against document context.
- **GitHub Intelligence**: Summarizes repository health, stale work, PRs, issues, and risks.
- **Calendar Intelligence**: Detects conflicts, prepares meeting context, and suggests schedules.

## Architecture

### Frontend

- Next.js
- React
- TypeScript
- TailwindCSS

### Backend

- FastAPI
- Python
- Deterministic demo services for reproducible judging
- API contracts designed for tool-based OpenAI Responses API orchestration

### Database

- Supabase
- PostgreSQL
- Schema prepared for users, memories, documents, repositories, events, graph edges, embeddings, and audit logs

### AI Layer

- OpenAI Responses API
- GPT-5.6/OpenAI reasoning capabilities
- Embeddings
- Structured Outputs
- Tool-style orchestration contract with citations and actions

## How Codex And GPT-5.6/OpenAI Reasoning Were Used

### Codex During Development

Codex was used throughout the development process as an engineering collaborator. It helped build, debug, test, and polish the repository from an early prototype into a public-ready hackathon submission.

Codex assisted with:

- Designing the monorepo structure for the Next.js frontend, FastAPI backend, shared TypeScript contracts, database schema, and scripts.
- Implementing app surfaces including Chat, Actions, Connectors, Automations, Activity, Documents, GitHub Intelligence, Calendar Intelligence, Email Intelligence, Knowledge Graph, Demo Center, and Submission Handoff.
- Debugging browser-to-backend API routing issues by adding a Next.js proxy for `/api` and `/health`.
- Improving demo reliability with deterministic backend services and fallback frontend chat responses.
- Fixing UI issues for the final demo, including landing-page logo alignment, graph spacing, and dashboard navigation from Chat.
- Adding smoke tests that validate core backend routes and confirm chat responses vary across prompts.
- Configuring linting, typechecking, build verification, and release documentation.
- Auditing the repository for generated files, local environment files, and secret exposure before public release.

Codex Feedback Session ID:

```text
019f838d-3c04-71e3-82ee-72f26c04e4cc
```

### GPT-5.6/OpenAI Reasoning During Development

GPT-5.6/OpenAI reasoning was used to shape the product concept, demo narrative, and AI interaction model. The project was designed around the idea that AI should not only retrieve isolated facts, but reason across relationships between tools.

During development, OpenAI reasoning helped define:

- The core product framing: an AI operating layer for digital work.
- The "search versus reasoning" distinction used in the demo.
- The structured chat response format: answer, tools, citations, actions, and follow-up questions.
- The cross-source reasoning flow that connects calendar events, email commitments, documents, GitHub activity, and graph relationships.
- The final Build Week demo script and judge flow.

### GPT-5.6/OpenAI Reasoning Inside The Application

Inside the prototype, OmniMind exposes the same reasoning contract that a production OpenAI Responses API implementation would use.

For example, when a user asks:

```text
What should I work on today?
```

OmniMind returns:

- A prioritized recommendation.
- The tool plan used to reach the answer.
- Citations from calendar, email, documents, GitHub, or memory.
- Follow-up questions such as `Why?` or `Show the graph path`.
- Actions such as drafting a reply, opening a source, or scheduling a focus block.

When the user asks:

```text
Why?
```

OmniMind explains the dependency chain across multiple sources: a fixed calendar event, a waiting email commitment, a project document, a GitHub risk, and a knowledge graph relationship. This is the key product idea: OmniMind helps users make decisions by connecting information across their digital life.

The current implementation uses deterministic demo responses for reliability during judging. The production path is to replace the deterministic chat router with OpenAI Responses API calls that invoke retrieval tools, connector tools, graph expansion, embeddings, and structured output validation.

## Folder Structure

```text
apps/
  web/        Next.js app, UI routes, reusable components, Supabase client helpers
  backend/    FastAPI app, API routes, auth, settings, and reasoning/demo services
packages/
  shared/     Shared TypeScript response contracts
database/     Supabase/PostgreSQL schema
docs/         Architecture notes and implementation details
scripts/      Local demo launcher and smoke test runner
```

## Installation

### 1. Clone The Repository

```bash
git clone https://github.com/0xKhushwant/OmniMind.git
cd OmniMind
```

### 2. Install Frontend Dependencies

```bash
npm install
```

### 3. Install Backend Dependencies

```powershell
cd apps/backend
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
cd ../..
```

On macOS or Linux:

```bash
cd apps/backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cd ../..
```

## Environment Variables

Never commit real `.env` or `.env.local` files. Use placeholders only in examples.

Create `apps/backend/.env`:

```env
OPENAI_API_KEY=your_key_here
SUPABASE_URL=your_supabase_url_here
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key_here
SUPABASE_JWT_SECRET=your_supabase_jwt_secret_here
GOOGLE_CLIENT_ID=your_google_client_id_here
GOOGLE_CLIENT_SECRET=your_google_client_secret_here
GITHUB_CLIENT_ID=your_github_client_id_here
GITHUB_CLIENT_SECRET=your_github_client_secret_here
OPENAI_EMBEDDING_MODEL=text-embedding-3-small
CORS_ORIGINS=http://localhost:3000,http://127.0.0.1:3000
```

Create `apps/web/.env.local`:

```env
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url_here
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your_supabase_publishable_key_here
NEXT_PUBLIC_API_URL=
NEXT_PUBLIC_DEMO_AUTH=true
B

[README truncated for size]

## Detected evidence (automated analysis)

Indexed codebase: 75 recognized source files, 279 KB.
- CSS (language) — detected in the code
- FastAPI (technology) — detected in the code
- Next.js (technology) — detected in the code
- OpenAI (technology) — detected in the code
- Python (language) — detected in the code
- React (technology) — detected in the code
- SQL (language) — detected in the code
- Supabase (technology) — detected in the code
- Tailwind CSS (technology) — detected in the code
- TypeScript (language) — detected in the code
- PostgreSQL (technology) — claimed on Devpost, not found in the code
- Vercel (technology) — claimed on Devpost, not found in the code

## Codebase structure (from repository index)

### Files (89 of 89)

```
.gitattributes
.gitignore
apps/backend/.env.example
apps/backend/app/__init__.py
apps/backend/app/api/__init__.py
apps/backend/app/api/routes.py
apps/backend/app/core/__init__.py
apps/backend/app/core/auth.py
apps/backend/app/core/settings.py
apps/backend/app/main.py
apps/backend/app/services/__init__.py
apps/backend/app/services/actions.py
apps/backend/app/services/activity.py
apps/backend/app/services/automations.py
apps/backend/app/services/briefing.py
apps/backend/app/services/calendar.py
apps/backend/app/services/chat.py
apps/backend/app/services/connectors.py
apps/backend/app/services/demo.py
apps/backend/app/services/documents.py
apps/backend/app/services/email.py
apps/backend/app/services/github.py
apps/backend/app/services/graph.py
apps/backend/app/services/submission.py
apps/backend/requirements.txt
apps/web/.env.local.example
apps/web/app/app/actions/page.tsx
apps/web/app/app/activity/page.tsx
apps/web/app/app/automations/page.tsx
apps/web/app/app/calendar/page.tsx
apps/web/app/app/connectors/page.tsx
apps/web/app/app/demo/page.tsx
apps/web/app/app/documents/page.tsx
apps/web/app/app/email/page.tsx
apps/web/app/app/graph/page.tsx
apps/web/app/app/layout.tsx
apps/web/app/app/page.tsx
apps/web/app/app/projects/page.tsx
apps/web/app/app/settings/page.tsx
apps/web/app/app/submission/page.tsx
apps/web/app/auth/callback/route.ts
apps/web/app/chat/page.tsx
apps/web/app/globals.css
apps/web/app/layout.tsx
apps/web/app/login/page.tsx
apps/web/app/page.tsx
apps/web/components/actions/action-center.tsx
apps/web/components/activity/activity-timeline.tsx
apps/web/components/app-shell/app-sidebar.tsx
apps/web/components/app-shell/app-topbar.tsx
apps/web/components/app-shell/user-menu.tsx
apps/web/components/auth/login-panel.tsx
apps/web/components/automations/automation-studio.tsx
apps/web/components/calendar/calendar-intelligence.tsx
apps/web/components/chat/chat-shell.tsx
apps/web/components/connectors/connector-hub.tsx
apps/web/components/demo/demo-center.tsx
apps/web/components/documents/document-intelligence.tsx
apps/web/components/email/email-intelligence.tsx
apps/web/components/graph/knowledge-graph.tsx
apps/web/components/projects/project-intelligence.tsx
apps/web/components/submission/submission-handoff.tsx
apps/web/components/ui/button.tsx
apps/web/eslint.config.mjs
apps/web/lib/api/client.ts
apps/web/lib/env.ts
apps/web/lib/supabase/client.ts
apps/web/lib/supabase/middleware.ts
apps/web/lib/supabase/server.ts
apps/web/lib/utils.ts
apps/web/middleware.ts
apps/web/next-env.d.ts
apps/web/next.config.ts
apps/web/package.json
apps/web/postcss.config.mjs
apps/web/tailwind.config.ts
apps/web/tsconfig.json
CHANGELOG.md
CONTRIBUTING.md
database/schema.sql
docs/architecture.md
LICENSE
package.json
packages/shared/package.json
packages/shared/src/index.ts
README.md
scripts/dev.mjs
scripts/smoke.mjs
SECURITY.md
```

### Dependencies

- apps/backend/requirements.txt: fastapi@==0.115.6, openai@==1.58.1, pydantic-settings@==2.7.0, pypdf@==5.1.0, python-dotenv@==1.0.1, python-multipart@==0.0.20, supabase@==2.11.0, uvicorn[standard]@==0.34.0
- apps/web/package.json: @omnimind/shared@0.1.0, @types/node@^22.10.2, @types/react@^19.0.1, @types/react-dom@^19.0.2, autoprefixer@^10.4.20, clsx@^2.1.1, eslint@^9.17.0, eslint-config-next@^15.0.4, framer-motion@^11.18.2, lucide-react@^0.468.0, next@^15.0.4, postcss@^8.4.49, react@^19.0.0, react-dom@^19.0.0, tailwind-merge@^2.5.5, tailwindcss@^3.4.17, typescript@^5.7.2
- package.json: @supabase/ssr@^0.12.3, @supabase/supabase-js@^2.110.7

### Recent commits (newest first)

- Improve README for Build Week submission
- Final OpenAI Build Week submission

## Key source files (fetched from GitHub, selected and truncated for size)

### CHANGELOG.md

```markdown
# Changelog

All notable changes to OmniMind will be documented in this file.

## [0.1.0] - 2026-07-21

### Added

- Initial OpenAI Build Week submission.
- Next.js, React, TypeScript, and TailwindCSS frontend.
- FastAPI backend with deterministic demo services.
- AI reasoning chat with tools, citations, follow-ups, and actions.
- Action Center for prioritized cross-app recommendations.
- Knowledge Graph explorer for connected entities and evidence paths.
- Connector Hub for provider readiness and sync outputs.
- Automation Studio for proactive workflows.
- Activity Timeline for auditability.
- Document, GitHub, Calendar, and Email Intelligence surfaces.
- Submission Handoff page with judge flow and smoke checks.
- Automated smoke test runner.
- Public-release documentation, MIT license, contribution guide, and security policy.

```

### SECURITY.md

```markdown
# Security Policy

## Supported Versions

This repository currently supports the latest `main` branch only.

## Reporting a Vulnerability

If you discover a security issue, please do not open a public issue with exploit details.

Instead, contact the maintainer privately with:

- A clear description of the issue.
- Steps to reproduce.
- Potential impact.
- Any suggested mitigation.

The maintainer will review the report, confirm the issue when possible, and prioritize a fix based on severity.

## Secrets and Credentials

Never commit secrets to this repository.

The following files are intentionally ignored:

- `.env`
- `.env.*`
- `apps/backend/.env`
- `apps/web/.env.local`

Use the provided example files for placeholders only.

If a secret is accidentally committed, rotate it immediately and remove it from Git history before making the repository public.

```

### package.json

```
{
  "name": "omnimind",
  "private": true,
  "version": "0.1.0",
  "description": "The AI Operating System for Your Digital Life.",
  "workspaces": [
    "apps/*",
    "packages/*"
  ],
  "scripts": {
    "dev": "node scripts/dev.mjs",
    "demo": "node scripts/dev.mjs",
    "dev:web": "npm run dev --workspace @omnimind/web",
    "dev:backend": "cd apps/backend && python -m uvicorn app.main:app --reload --port 3001",
    "build": "npm run build --workspace @omnimind/web",
    "lint": "npm run lint --workspace @omnimind/web",
    "typecheck": "npm run typecheck --workspace @omnimind/web",
    "smoke": "node scripts/smoke.mjs"
  },
  "engines": {
    "node": ">=20.0.0"
  },
  "dependencies": {
    "@supabase/ssr": "^0.12.3",
    "@supabase/supabase-js": "^2.110.7"
  }
}

```

### packages/shared/package.json

```
{
  "name": "@omnimind/shared",
  "version": "0.1.0",
  "private": true,
  "type": "module",
  "exports": {
    ".": "./src/index.ts"
  }
}

```

### apps/backend/requirements.txt

```
fastapi==0.115.6
uvicorn[standard]==0.34.0
pydantic-settings==2.7.0
python-dotenv==1.0.1
openai==1.58.1
supabase==2.11.0
python-multipart==0.0.20
pypdf==5.1.0

```

### apps/web/package.json

```
{
  "name": "@omnimind/web",
  "private": true,
  "version": "0.1.0",
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "eslint .",
    "typecheck": "tsc --noEmit"
  },
  "dependencies": {
    "@omnimind/shared": "0.1.0",
    "clsx": "^2.1.1",
    "framer-motion": "^11.18.2",
    "lucide-react": "^0.468.0",
    "next": "^15.0.4",
    "react": "^19.0.0",
    "react-dom": "^19.0.0",
    "tailwind-merge": "^2.5.5"
  },
  "devDependencies": {
    "@types/node": "^22.10.2",
    "@types/react": "^19.0.1",
    "@types/react-dom": "^19.0.2",
    "autoprefixer": "^10.4.20",
    "eslint": "^9.17.0",
    "eslint-config-next": "^15.0.4",
    "postcss": "^8.4.49",
    "tailwindcss": "^3.4.17",
    "typescript": "^5.7.2"
  }
}

```

### apps/web/app/layout.tsx

```typescript
import type { Metadata } from "next";
import "./globals.css";

export const metadata: Metadata = {
  title: "OmniMind",
  description: "The AI Operating System for Your Digital Life."
};

export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
  return (
    <html lang="en" className="dark" suppressHydrationWarning>
      <body suppressHydrationWarning>{children}</body>
    </html>
  );
}

```

### apps/backend/app/main.py

```python
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

from app.api.routes import router
from app.core.settings import settings

app = FastAPI(
    title="OmniMind API",
    description="Reasoning, retrieval and integration API for OmniMind.",
    version="0.1.0",
)

app.add_middleware(
    CORSMiddleware,
    allow_origins=settings.cors_origins,
    allow_origin_regex=settings.cors_origin_regex,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

app.include_router(router, prefix="/api")


@app.get("/health")
def health() -> dict[str, str]:
    return {"status": "ok", "service": "omnimind-api"}

```

### packages/shared/src/index.ts

```typescript
export type SourceKind = "email" | "calendar" | "document" | "github" | "note" | "chat";

export type MemoryItem = {
  id: string;
  title: string;
  source: SourceKind;
  occurredAt: string;
  summary: string;
};

export type DailyPriority = {
  id: string;
  title: string;
  reason: string;
  urgency: "low" | "medium" | "high";
};

export type AiSuggestion = {
  id: string;
  title: string;
  detail: string;
  actionLabel: string;
};

export type ToolName =
  | "memory.search"
  | "calendar.lookup"
  | "github.summarize"
  | "documents.retrieve"
  | "graph.expand";

export type ChatCitation = {
  id: string;
  title: string;
  source: SourceKind;
  excerpt: string;
};

export type ChatAction = {
  id: string;
  label: string;
  intent: "draft_reply" | "open_source" | "schedule_focus" | "create_task";
};

export type ChatResponse = {
  answer: string;
  tools: ToolName[];
  citations: ChatCitation[];
  actions: ChatAction[];
  followUps: string[];
};

export type DocumentChunk = {
  id: string;
  documentId: string;
  chunkIndex: number;
  content: string;
  tokenEstimate: number;
};

export type DocumentRecord = {
  id: string;
  title: string;
  source: "upload";
  mimeType: string;
  chunkCount: number;
  tokenEstimate: number;
  createdAt: string;
};

export type DocumentIngestResponse = {
  document: DocumentRecord;
  chunks: DocumentChunk[];
  embeddingStatus: "generated" | "skipped" | "failed";
};

export type DocumentSearchResult = {
  documentId: string;
  title: string;
  chunkId: string;
  chunkIndex: number;
  excerpt: string;
  score: number;
};

export type DocumentQuestionResponse = {
  answer: string;
  citations: DocumentSearchResult[];
};

export type RepositoryHealth = "healthy" | "at-risk" | "stale";

export type RepositoryRecord = {
  id: string;
  name: string;
  owner: string;
  url: string;
  description: string;
  lastCommitAt: string;
  openPullRequests: number;
  openIssues: number;
  staleDays: number;
  health: RepositoryHealth;
  summary: string;
};

export type RepositoryActivity = {
  type: "commit" | "pull_request" | "issue";
  title: string;
  author: string;
  when: string;
};

export type RepositoryDetail = {
  repository: RepositoryRecord;
  activity: RepositoryActivity[];
  risks: string[];
  recommendation: string;
};

export type CalendarEvent = {
  id: string;
  title: string;
  startsAt: string;
  endsAt: string;
  location: string;
  attendees: string[];
  project: string;
  preparation: string[];
  risk: "Low" | "Medium" | "High";
};

export type CalendarConflict = {
  id: string;
  events: CalendarEvent[];
  severity: "low" | "medium" | "high";
  recommendation: string;
};

export type SuggestedScheduleItem = {
  time: string;
  title: string;
  type: "focus" | "communication" | "meeting";
};

export type CalendarSchedule = {
  date: string;
  timezone: string;
  events: CalendarEvent[];
  conflicts: CalendarConflict[];
  suggestedSchedule: SuggestedScheduleItem[];
};

export type ActionCenterItem = {
  id: string;
  title: string;
  description: string;
  source: SourceKind;
  urgency: "low" | "medium" | "high";
  status: "ready" | "done" | "deferred";
  primaryAction: string;
  context: {
    route?: string;
    draft?: string;
    reason: string;
    evidence: string[];
  };
};

export type AutomationSuggestion = {
  id: string;
  title: string;
  description: string;
};

export type ActionCenterResponse = {
  summary: {
    headline: string;
    highUrgency: number;
    conflicts: number;
    meetings: number;
  };
  actions: ActionCenterItem[];
  automationSuggestions: AutomationSuggestion[];
};

export type DemoReadinessStatus = "ready" | "fallback" | "pending";

export type DemoRouteCheck = {
  label: string;
  route: string;
  status: DemoReadinessStatus;
  note: string;
};

export type DemoBackendCheck = {
  label: string;
  status: DemoReadinessStatus;
  detail: string;
};

export type DemoScriptStep = {
  step: string;
  route: string;
  talkTrack: string;
};

export type DemoStatusResponse = {
  summary: {
    status: DemoReadinessStatus;
    headline: string;
    completedPhases: number;
    readyRoutes: number;
    backendChecks: number;
  };
  routeChecks: DemoRouteCheck[];
  backendChecks: DemoBackendCheck[];
  demoScript: DemoScriptStep[];
};

export type GraphNodeKind = "person" | "project" | "repository" | "event" | "document" | "action";

export type GraphNode = {
  id: string;
  label: string;
  kind: GraphNodeKind;
  summary: string;
  source: SourceKind;
  x: number;
  y: number;
};

export type GraphEdge = {
  id: string;
  from: string;
  to: string;
  label: string;
  strength: number;
  evidence: string;
};

export type GraphResponse = {
  nodes: GraphNode[];
  edges: GraphEdge[];
  summary: {
    nodes: number;
    edges: number;
    strongestRelationship: string;
    suggestedQuestion: string;
  };
};

export type GraphExpansionResponse = {
  node: GraphNode;
  connectedNodes: GraphNode[];
  edges: GraphEdge[];
  recommendedAction: string;
};

export type EmailThreadStatus = "needs_reply" | "scheduled" | "monitor";

export type EmailThread = {
  id: string;
  subject: string;
  from: string;
  participants: string[];
  lastMessageAt: string;
  status: EmailThreadStatus;
  priority: "low" | "medium" | "high";
  summary: string;
  promisedAction: string;
  suggestedReply: string;
  relatedEntities: string[];
};

export type EmailInboxSummary = {
  total: number;
  needsReply: number;
  highPriority: number;
  oldestWaiting: string;
  topRisk: string;
};

export type EmailThreadsResponse = {
  threads: EmailThread[];
  summary: EmailInboxSummary;
};

export type EmailThreadDetail = {
  thread: EmailThread;
  timeline: Array<{ when: string; event: string }>;
  recommendedAction: string;
};

export type EmailDraftResponse = {
  threadId: string;
  subject: string;
  body: string;
  tone: string;
  sourceContext: string[];
};

export type AutomationRecord = {
  id: string;
  title: string;
  description: string;
  sched
[truncated — 2223 more characters]
```

### apps/web/app/page.tsx

```typescript
"use client";

import { motion } from "framer-motion";
import {
  ArrowRight,
  Bell,
  CalendarDays,
  CheckCircle2,
  ClipboardList,
  FileText,
  GitPullRequest,
  Network,
  Search,
  Sparkles
} from "lucide-react";
import { Button } from "@/components/ui/button";

const navItems = ["Home", "Demo Center", "Actions", "Memory", "Knowledge Graph", "Email", "Projects", "Calendar", "Documents", "Chat", "Settings"];

const priorities = [
  "Prep for 2:00 PM architecture review",
  "Reply to Rahul about Indoor Localization",
  "Review stale pull request in sensing pipeline"
];

const memories = [
  { icon: FileText, title: "Indoor Localization brief updated", meta: "Google Drive • 18 min ago" },
  { icon: GitPullRequest, title: "PR #42 added vector search filters", meta: "GitHub • 46 min ago" },
  { icon: CalendarDays, title: "Design sync moved to tomorrow", meta: "Calendar • 1 hr ago" }
];

const graphNodes = [
  { label: "Rahul", x: "14%", y: "34%" },
  { label: "Indoor Localization", x: "42%", y: "18%" },
  { label: "PR #42", x: "78%", y: "34%" },
  { label: "Build Week", x: "28%", y: "76%" },
  { label: "Design Sync", x: "70%", y: "76%" }
];

export default function Home() {
  const previewRoutes: Record<string, string> = {
    Home: "/app",
    "Demo Center": "/app/demo",
    Actions: "/app/actions",
    Memory: "/app#memory",
    "Knowledge Graph": "/app/graph",
    Email: "/app/email",
    Projects: "/app/projects",
    Calendar: "/app/calendar",
    Documents: "/app/documents",
    Chat: "/chat",
    Settings: "/app/settings"
  };

  return (
    <main className="min-h-screen bg-ink text-white">
      <section className="relative overflow-hidden border-b border-line">
        <div className="absolute inset-0 bg-[radial-gradient(circle_at_20%_20%,rgba(125,211,252,0.16),transparent_28%),radial-gradient(circle_at_78%_18%,rgba(167,243,208,0.12),transparent_22%),linear-gradient(180deg,rgba(255,255,255,0.06),transparent_40%)]" />
        <div className="relative mx-auto flex min-h-[92vh] max-w-7xl flex-col px-5 py-5 sm:px-8">
          <header className="flex items-center justify-between gap-6">
            <div className="flex min-w-[150px] items-center gap-3">
              <div className="grid size-9 shrink-0 place-items-center overflow-hidden rounded-lg border border-line bg-white/[0.06] p-1.5">
                <img src="/omnimind-logo.png" alt="" className="size-full object-contain object-center" />
              </div>
              <span className="whitespace-nowrap text-sm font-semibold tracking-wide leading-none">OmniMind</span>
            </div>
            <nav className="hidden items-center gap-2 md:flex">
              <Button variant="ghost" onClick={() => window.scrollTo({ top: 0, behavior: "smooth" })}>Product</Button>
              <Button variant="ghost" onClick={() => (window.location.href = "/app")}>Architecture</Button>
              <Button variant="ghost" onClick={() => (window.location.href = "/app/settings")}>Settings</Button>
            </nav>
            <Button className="gap-2" onClick={() => (window.location.href = "/app")}>
              Open Demo
              <ArrowRight className="size-4" />
            </Button>
          </header>

          <div className="grid flex-1 items-center gap-12 py-14 lg:grid-cols-[0.9fr_1.1fr]">
            <motion.div
              initial={{ opacity: 0, y: 18 }}
              animate={{ opacity: 1, y: 0 }}
              transition={{ duration: 0.7 }}
              className="max-w-2xl"
            >
              <div className="mb-6 inline-flex items-center gap-2 rounded-full border border-line bg-white/[0.05] px-3 py-1 text-sm text-mist">
                <Sparkles className="size-3.5 text-sage" />
                GPT reasoning across every source you connect
              </div>
              <h1 className="text-5xl font-semibold leading-[1.02] tracking-normal sm:text-6xl lg:text-7xl">
                The AI Operating System for Your Digital Life.
              </h1>
              <p className="mt-6 max-w-xl text-lg leading-8 text-mist">
                OmniMind turns emails, calendars, documents, repositories, and notes into one living knowledge graph so your assistant can recommend what matters next.
              </p>
              <div className="mt-8 flex flex-col gap-3 sm:flex-row">
                <Button className="gap-2 px-5" onClick={() => (window.location.href = "/login")}>
                  Start with Google
                  <ArrowRight className="size-4" />
                </Button>
                <Button variant="secondary" className="gap-2 px-5" onClick={() => (window.location.href = "/app/settings")}>
                  Connect GitHub
                  <GitPullRequest className="size-4" />
                </Button>
              </div>
            </motion.div>

            <motion.div
              initial={{ opacity: 0, scale: 0.96 }}
              animate={{ opacity: 1, scale: 1 }}
              transition={{ duration: 0.7, delay: 0.1 }}
              className="rounded-2xl border border-line bg-panel/90 p-3 shadow-glow backdrop-blur"
            >
              <div className="grid min-h-[560px] overflow-hidden rounded-xl border border-line bg-[#08090d] lg:grid-cols-[220px_1fr]">
                <aside className="hidden border-r border-line bg-white/[0.025] p-4 lg:block">
                  <div className="mb-5 h-10 rounded-lg border border-line bg-white/[0.04]" />
                  <div className="space-y-1">
                    {navItems.map((item, index) => (
                      <button
                        key={item}
                        onClick={() => (window.location.href = previewRoutes[item])}
                        className={`rounded-lg px-3 py-2 text-sm ${index === 0 ? "bg-white text-ink" : "text-mist"}`}
                      >
                        {item}
                      </button>
                    ))}
                  </div>
                </aside>
                <
[truncated — 6484 more characters]
```

[68 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]