# WYSIWYG Markdown Editor

A full-stack markdown editor with live preview, built with Go backend and React/TypeScript frontend.

## Features

- **Live Preview**: Real-time GFM markdown rendering as you type
- **File Management**: Create, open, edit, save, and delete markdown files
- **Three Themes**: Light, Dark, and System (auto-detect) with theme persistence
- **Responsive Design**: Works on mobile (320px) and desktop (1920px)
- **CRUD API**: RESTful API for file operations

## Tech Stack

- **Backend**: Go with Cobra CLI, logrus logging, standard HTTP server
- **Frontend**: React, TypeScript, Tailwind CSS, Vite, marked (GFM parser)
- **Storage**: Local filesystem (flat structure)

## Quick Start

### Prerequisites

- Go 1.21+
- Node.js 20+
- Nix (optional, for development environment)

### Development

1. Enter the development environment (with Nix):
   ```bash
   nix develop
   ```

2. Start the backend:
   ```bash
   make dev-backend
   # or: cd backend && go run main.go
   ```

3. Start the frontend (in another terminal):
   ```bash
   make dev-frontend
   # or: cd frontend && npm run dev
   ```

4. Open http://localhost:5173 (frontend dev server) or http://127.0.0.1:8080 (backend)

### Build & Run

```bash
# Build everything (frontend + backend)
make build

# Run the built application
make run
# or: ./bin/markdown-editor-backend

# Run tests
make test
```

### CLI Options

```
./bin/markdown-editor-backend --help

Flags:
  --data-dir string   Storage path for markdown files (default "./data")
  --host string       Bind address (default "127.0.0.1")
  --port int          Server port (default 8080)
```

## API Endpoints

| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/api/health` | Health check |
| GET | `/api/files` | List all files |
| POST | `/api/files` | Create new file |
| GET | `/api/files/{name}` | Get file content |
| PUT | `/api/files/{name}` | Update file |
| DELETE | `/api/files/{name}` | Delete file |

## Project Structure

```
.
├── backend/
│   ├── main.go              # CLI entry point
│   ├── server/              # HTTP server
│   ├── handlers/            # API handlers
│   ├── storage/             # File storage
│   └── static/              # Frontend build output
├── frontend/
│   ├── src/
│   │   ├── components/      # React components
│   │   ├── api/             # API client
│   │   └── types.ts         # TypeScript types
│   └── dist/                # Build output
├── data/                    # Markdown files storage
├── bin/                     # Compiled binaries
├── Makefile                 # Build automation
└── flake.nix                # Nix development environment
```

## Testing

```bash
# Run all tests
make test

# Backend tests only
make backend-test

# Frontend tests only
make frontend-test
```

## License

MIT
