diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..5dbc65e --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,51 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Overview + +This is the CodePress investor pitch deck - a Next.js presentation app with slide-based navigation and embedded CodePress visual editor demos. It's part of the larger CodePress monorepo. + +## Common Commands + +- **Dev server**: `pnpm dev` - starts Next.js at http://localhost:3000 +- **Build**: `pnpm build` +- **Lint**: `pnpm lint` (uses ESLint with next/core-web-vitals and next/typescript) +- **Type check**: `npx tsc --noEmit` + +## Architecture + +### Slide System + +The deck uses a custom slide presentation system with keyboard navigation (arrow keys): + +- **Slide routes**: Defined in `src/slides/slideRoutes.ts` - add new slides to this array +- **SlideLayout**: `src/slides/components/SlideLayout.tsx` - handles navigation, animations, and keyboard controls +- **Slide components**: Each slide is a page in `src/pages/slides/` (e.g., `hero.tsx`, `demo.tsx`) +- **Root redirect**: `src/pages/index.tsx` redirects to the first slide + +### Key Directories + +- `src/pages/slides/` - Individual slide pages +- `src/slides/components/` - Shared slide UI components (SlideHeader, SlideLayout, demo apps) +- `src/components/ui/` - shadcn/ui components with TailwindCSS +- `src/slides/seoMeta.ts` - SEO metadata for each slide + +### CodePress Integration + +The deck uses CodePress's own visual editing tools: +- `@codepress/codepress-engine` - SWC plugin and webpack plugin configured in `next.config.ts` +- `@quantfive/codepress-browser-extension` - Editor UI components +- Demo page (`src/pages/slides/demo.tsx`) embeds the CodePress editor with configurable API endpoint + +### Environment + +- API URL is set via `CODEPRESS_EDITOR_API_BASE_URL` in `src/pages/slides/demo.tsx`: + - Production: `https://api.codepress.dev/v1` + - Development: `http://localhost:8007/v1` + +## Code Style + +- **Styling**: TailwindCSS v4 with shadcn/ui components +- **Path aliases**: `@/*` maps to `./src/*` +- `codepress-ignore="true"` attribute on elements excludes them from visual editing diff --git a/package.json b/package.json index 184b231..26314a2 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "clsx": "^2.1.1", "geist": "^1.5.1", "lucide-react": "^0.541.0", - "next": "15.5.7", + "next": "15.5.9", "react": "19.1.2", "react-dom": "19.1.2", "react-player": "^3.3.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb4dd91..6ef9252 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,13 +34,13 @@ importers: version: 2.1.1 geist: specifier: ^1.5.1 - version: 1.5.1(next@15.5.7(@babel/core@7.28.4)(react-dom@19.1.2(react@19.1.2))(react@19.1.2)) + version: 1.5.1(next@15.5.9(@babel/core@7.28.4)(react-dom@19.1.2(react@19.1.2))(react@19.1.2)) lucide-react: specifier: ^0.541.0 version: 0.541.0(react@19.1.2) next: - specifier: 15.5.7 - version: 15.5.7(@babel/core@7.28.4)(react-dom@19.1.2(react@19.1.2))(react@19.1.2) + specifier: 15.5.9 + version: 15.5.9(@babel/core@7.28.4)(react-dom@19.1.2(react@19.1.2))(react@19.1.2) react: specifier: 19.1.2 version: 19.1.2 @@ -526,8 +526,8 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@next/env@15.5.7': - resolution: {integrity: sha512-4h6Y2NyEkIEN7Z8YxkA27pq6zTkS09bUSYC0xjd0NpwFxjnIKeZEeH591o5WECSmjpUhLn3H2QLJcDye3Uzcvg==} + '@next/env@15.5.9': + resolution: {integrity: sha512-4GlTZ+EJM7WaW2HEZcyU317tIQDjkQIyENDLxYJfSWlfqguN+dHkZgyQTV/7ykvobU7yEH5gKvreNrH4B6QgIg==} '@next/eslint-plugin-next@15.5.4': resolution: {integrity: sha512-SR1vhXNNg16T4zffhJ4TS7Xn7eq4NfKfcOsRwea7RIAHrjRpI9ALYbamqIJqkAhowLlERffiwk0FMvTLNdnVtw==} @@ -2551,8 +2551,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - next@15.5.7: - resolution: {integrity: sha512-+t2/0jIJ48kUpGKkdlhgkv+zPTEOoXyr60qXe68eB/pl3CMJaLeIGjzp5D6Oqt25hCBiBTt8wEeeAzfJvUKnPQ==} + next@15.5.9: + resolution: {integrity: sha512-agNLK89seZEtC5zUHwtut0+tNrc0Xw4FT/Dg+B/VLEo9pAcS9rtTKpek3V6kVcVwsB2YlqMaHdfZL4eLEVYuCg==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -3760,7 +3760,7 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@next/env@15.5.7': {} + '@next/env@15.5.9': {} '@next/eslint-plugin-next@15.5.4': dependencies: @@ -5550,9 +5550,9 @@ snapshots: functions-have-names@1.2.3: {} - geist@1.5.1(next@15.5.7(@babel/core@7.28.4)(react-dom@19.1.2(react@19.1.2))(react@19.1.2)): + geist@1.5.1(next@15.5.9(@babel/core@7.28.4)(react-dom@19.1.2(react@19.1.2))(react@19.1.2)): dependencies: - next: 15.5.7(@babel/core@7.28.4)(react-dom@19.1.2(react@19.1.2))(react@19.1.2) + next: 15.5.9(@babel/core@7.28.4)(react-dom@19.1.2(react@19.1.2))(react@19.1.2) gensync@1.0.0-beta.2: optional: true @@ -5997,9 +5997,9 @@ snapshots: natural-compare@1.4.0: {} - next@15.5.7(@babel/core@7.28.4)(react-dom@19.1.2(react@19.1.2))(react@19.1.2): + next@15.5.9(@babel/core@7.28.4)(react-dom@19.1.2(react@19.1.2))(react@19.1.2): dependencies: - '@next/env': 15.5.7 + '@next/env': 15.5.9 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001743 postcss: 8.4.31