pnpm + TypeScript workspace per design doc §13:
- apps/{web,api,worker} skeletons (Next.js 16, Fastify 5, BullMQ)
- packages/{core,solana,prometheus,db,config} (core has real types/DTOs;
solana/prometheus are stubs)
- programs/pyre-core placeholder (future Anchor, v1.0)
- docs/: PYRE_MVP_DESIGN (canonical), ARCHITECTURE, SECURITY, TOKEN_CLASSIFICATION
- CLAUDE.md, README, .env.example (no private-key var by design)
Skeleton + docs only — no Solana/business logic yet. All workspaces typecheck clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1.5 KiB
1.5 KiB
Commands & conventions
Toolchain (Linux, no sudo)
- Node 22,
pnpm11.5.0 installed standalone at~/.local/share/pnpm/bin(added to ~/.bashrc PATH; new shells get it). Ifpnpmnot found, use~/.local/share/pnpm/bin/pnpmorsource ~/.bashrc. uv/uvxat~/.local/bin(used by the Serena MCP server).
Workspace commands (from repo root)
pnpm install— install all workspace deps (NOT yet run; expect first-run version fixups).pnpm -r build·pnpm -r typecheck·pnpm -r test·pnpm dev(parallel dev).- Per package:
pnpm --filter @pyre/api dev, etc. lint/testare placeholder echo scripts for now.
Conventions
- TypeScript strict; ESM only. Because base tsconfig uses
verbatimModuleSyntax+moduleResolution: Bundler, relative imports need explicit.jsextensions. - Internal deps via
workspace:*. Package names@pyre/<name>. - Lamport/SOL amounts passed as strings in DTOs.
- Server must recompute classification; never trust client-submitted classifications.
- Secrets only via env (
.env, never committed). There is intentionally no private-key/mnemonic env var.
First Claude Code prompts (from §20)
- Plan-only: "Read CLAUDE.md and docs/PYRE_MVP_DESIGN.md. Do not write code yet. Produce an implementation plan for PYRE MVP v0.1 ..."
- Then skeleton (already done): monorepo with pnpm workspaces. Next real work = Phase 1 (Wallet Scanner): implement scan endpoint + classification in @pyre/core/@pyre/solana, wallet-connect UI.