# Markdown Editor A WYSIWYG Markdown Editor with live preview, built with Go backend and React/TypeScript frontend. ## Features - **Markdown Editor** with live GitHub Flavored Markdown preview - **File Management**: Create, open, save, and delete markdown files - **Theme System**: Dark, Light, and System themes with persistence - **Responsive Design**: Works on desktop and mobile - **REST API**: Full CRUD operations for markdown files ## Project Structure ``` . ├── backend/ │ ├── cmd/server/ │ │ └── main.go │ ├── internal/ │ │ ├── api/ │ │ │ ├── server.go │ │ │ └── server_test.go │ │ └── storage/ │ │ ├── storage.go │ │ └── storage_test.go │ ├── pkg/ │ │ └── logger/ │ │ └── logger.go │ └── go.mod ├── frontend/ │ ├── src/ │ │ ├── components/ │ │ ├── hooks/ │ │ ├── lib/ │ │ ├── types/ │ │ ├── App.tsx │ │ ├── App.test.tsx │ │ ├── index.css │ │ └── index.tsx │ ├── public/ │ ├── package.json │ ├── tsconfig.json │ └── tailwind.config.js ├── flake.nix ├── flake.lock └── SPEC.md ``` ## Development ### Using Nix The project uses Nix for development environment. Ensure you have Nix installed. ```bash # Start development shell nix-shell # Run tests cd backend && go test ./... cd ../frontend && npm test ``` ### Backend ```bash cd backend # Run server with defaults go run cmd/server/main.go # Run with custom settings go run cmd/server/main.go --data-dir ./data --port 8080 --host 127.0.0.1 # Run tests go test ./... ``` ### Frontend ```bash cd frontend # Install dependencies (in nix-shell) npm install # Start development server npm start # Build for production npm run build # Run tests npm test ``` ## API Endpoints - `GET /api/files` - List all markdown files - `POST /api/files` - Create a new file - `PUT /api/files/:filename` - Update a file - `DELETE /api/files/:filename` - Delete a file - `/` - Serve frontend (SPA fallback) - `/static/*` - Serve static assets ## Testing Run all tests: ```bash # Backend cd backend && go test -v ./... # Frontend cd frontend && npm test ``` ## Evaluation Checklist - [ ] CLI starts with defaults - [ ] CRUD works end-to-end - [ ] Static assets are properly served - [ ] Theme switch & persistence - [ ] Responsive at 320px and 1920px