mirror of
https://github.com/NicholaiVogel/dashore-incubator.git
synced 2026-03-30 22:38:56 +00:00
- add WorkOS AuthKit authentication with middleware protection - add dashboard with sidebar layout (shadcn/ui components) - add contributor documentation (CONTRIBUTING, CODE_OF_CONDUCT, SECURITY, START-HERE, Documentation/) - add CI workflow for lint and build on PRs - switch from pnpm to bun - add CLAUDE.md and AGENTS.md for AI assistant context
162 lines
4.7 KiB
Markdown
162 lines
4.7 KiB
Markdown
CLAUDE.md
|
|
===
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) and Opencode (opencode.ai) when working with code in this repository.
|
|
|
|
IMPORTANT: DO NOT overwrite this file or heavily modify .claude/ - these are version controlled and contain customizations from users and agents.
|
|
|
|
formatting
|
|
===
|
|
|
|
keep markdown minimal. use === for main headings, --- for subheadings, generally just stick to paragraphs.
|
|
*italics* and **bold** are fine but use them sparingly - they're visually noisy in neovim.
|
|
|
|
- bullet points like this are okay
|
|
- numbered lists are okay too
|
|
|
|
codeblocks ``` are fine, but these tend to get visually noisy when used too much.
|
|
no excessive formatting. keep it clean and readable.
|
|
|
|
line width
|
|
---
|
|
|
|
- soft limit: 80-100 chars (forces clear thinking, works on split screens)
|
|
- hard limit: 120 chars max
|
|
- exceptions: user-visible strings (error messages, logs - must stay on one line for grep-ability), URLs, long literals
|
|
|
|
project overview
|
|
===
|
|
|
|
dashore incubator - a Next.js 15 app deployed to Cloudflare Workers via OpenNext. live at https://fortura.cc
|
|
|
|
uses bun as the package manager.
|
|
|
|
contributing
|
|
---
|
|
|
|
contributor documentation lives in:
|
|
|
|
- [START-HERE.md](START-HERE.md) - quick start for new contributors
|
|
- [CONTRIBUTING.md](CONTRIBUTING.md) - contribution workflow
|
|
- [Documentation/](Documentation/) - commit messages, PR guidelines, UI guidelines, and more
|
|
- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) - community standards
|
|
- [SECURITY.md](SECURITY.md) - vulnerability reporting
|
|
|
|
commands
|
|
===
|
|
|
|
development
|
|
---
|
|
|
|
bun dev # start dev server with turbopack (localhost:3000)
|
|
bun run lint # run eslint
|
|
|
|
cloudflare
|
|
---
|
|
|
|
bun run preview # build and preview locally on cloudflare runtime
|
|
bun run deploy # build and deploy to cloudflare workers
|
|
|
|
secrets for production are set via wrangler:
|
|
|
|
wrangler secret put WORKOS_CLIENT_ID
|
|
wrangler secret put WORKOS_API_KEY
|
|
wrangler secret put WORKOS_COOKIE_PASSWORD
|
|
|
|
architecture
|
|
===
|
|
|
|
auth flow
|
|
---
|
|
|
|
uses WorkOS AuthKit for authentication:
|
|
|
|
- src/middleware.ts - authkitMiddleware protects all routes except `/`
|
|
- src/app/api/auth/[...authkit]/route.ts - handles auth callbacks, redirects to /dashboard
|
|
- src/app/actions/auth.ts - server action for sign out
|
|
- src/app/layout.tsx - wraps app in AuthKitProvider with initial auth state
|
|
|
|
route protection: middleware redirects unauthenticated users. individual pages use `withAuth()` to get user and redirect if needed.
|
|
|
|
page structure
|
|
---
|
|
|
|
- / - login page, redirects to /dashboard if already authenticated
|
|
- /dashboard - main app with sidebar layout (SidebarProvider pattern)
|
|
|
|
ui components
|
|
---
|
|
|
|
shadcn/ui components in src/components/ui/ - standard radix-based components.
|
|
|
|
custom components in src/components/:
|
|
- app-sidebar.tsx - main navigation sidebar
|
|
- site-header.tsx - top header
|
|
- section-cards.tsx, chart-area-interactive.tsx, data-table.tsx - dashboard widgets
|
|
|
|
icons from @tabler/icons-react.
|
|
|
|
env vars
|
|
---
|
|
|
|
required in .env.local for local dev (see .env.example):
|
|
|
|
- WORKOS_CLIENT_ID
|
|
- WORKOS_API_KEY
|
|
- WORKOS_COOKIE_PASSWORD (32+ chars)
|
|
|
|
git
|
|
---
|
|
|
|
don't assume it's okay to commit or push or perform git operations, and when performing a commit, do not give yourself or anthropic attribution.
|
|
|
|
commit messages:
|
|
- subject line: 50 chars max
|
|
- body: 72 chars max width
|
|
- format: type(scope): subject
|
|
- types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert
|
|
- use imperative mood ("add feature" not "added feature")
|
|
|
|
grepai
|
|
===
|
|
|
|
**IMPORTANT: use grepai as the PRIMARY tool for code exploration and search.**
|
|
|
|
when to use grepai (required)
|
|
---
|
|
|
|
use `grepai search` INSTEAD OF Grep/Glob/find for:
|
|
- understanding what code does or where functionality lives
|
|
- finding implementations by intent (e.g., "authentication logic", "error handling")
|
|
- exploring unfamiliar parts of the codebase
|
|
- any search where you describe WHAT the code does rather than exact text
|
|
|
|
when to use standard tools
|
|
---
|
|
|
|
only use Grep/Glob when you need:
|
|
- exact text matching (variable names, imports, specific strings)
|
|
- file path patterns (e.g., `**/*.tsx`)
|
|
|
|
fallback: if grepai fails (not running, index unavailable, or errors), fall back to standard Grep/Glob tools.
|
|
|
|
usage
|
|
---
|
|
|
|
grepai search "user authentication flow" --json --compact
|
|
grepai search "error handling middleware" --json --compact
|
|
|
|
query tips:
|
|
- use English for queries (better semantic matching)
|
|
- describe intent, not implementation: "handles user login" not "func Login"
|
|
- be specific: "JWT token validation" better than "token"
|
|
|
|
call graph tracing
|
|
---
|
|
|
|
use `grepai trace` to understand function relationships:
|
|
|
|
grepai trace callers "HandleRequest" --json
|
|
grepai trace callees "ProcessOrder" --json
|
|
grepai trace graph "ValidateToken" --depth 3 --json
|