# Development Setup

This document describes how to set up and run the Soroban Flashcard Generator for development.

## Architecture

This is a monorepo with the following structure:

```
.
├── apps/
│   └── web/                 # Next.js web application
├── packages/
│   └── core/
│       └── client/
│           ├── node/        # @soroban/core - Node.js TypeScript bindings
│           └── typescript/  # @soroban/client - TypeScript utilities
└── scripts/                 # Development scripts
```

## Prerequisites

- Node.js 18+
- pnpm 8+
- Python 3.8+
- Typst (for PDF generation)
- qpdf (optional, for PDF optimization)

## Quick Start

1. **Initial Setup**
   ```bash
   pnpm setup
   ```
   This script will:
   - Install all dependencies
   - Build the core packages
   - Set up Panda CSS
   - Run type checks

2. **Development**
   ```bash
   pnpm dev
   ```
   This starts all development servers in parallel using Turborepo.

   The web app will be available at: http://localhost:3000

## Available Scripts

- `pnpm setup` - Full development environment setup
- `pnpm dev` - Start all development servers
- `pnpm build` - Build all packages
- `pnpm type-check` - Run TypeScript checks
- `pnpm lint` - Run linting
- `pnpm test` - Run tests
- `pnpm clean` - Clean build artifacts

## Packages

### @soroban/core
Node.js TypeScript bindings that call the Python generator directly via `child_process`. Located in `packages/core/client/node/`.

### @soroban/web
Next.js web application with beautiful UI built using:
- **Panda CSS** for styling
- **TanStack Form** for form management
- **Radix UI** primitives for accessibility
- **Lucide React** for icons

## Development Notes

1. **TypeScript Bindings**: The web app calls Python directly through TypeScript bindings, not via a FastAPI server.

2. **Styling**: Uses Panda CSS instead of Tailwind. Run `pnpm panda` in the web app to regenerate styles.

3. **Monorepo**: Built packages must be available before the web app can use them. The setup script handles this automatically.

4. **Asset Storage**: Generated files are temporarily stored in memory. In production, use Redis or a database.

## Troubleshooting

**TypeScript errors**: Run `pnpm type-check` to see detailed errors.

**Build issues**: Try `pnpm clean` then `pnpm setup` to rebuild everything.

**Python errors**: Ensure Python 3, Typst, and qpdf are installed and accessible in PATH.