# Markdown Editor A full-featured markdown editor with live preview, built with modern web technologies. ## Features - **Real-time Preview**: See your markdown rendered as you type - **Syntax Highlighting**: Powered by CodeMirror with support for multiple languages - **File Management**: Create, save, load, and delete markdown files - **Mermaid Diagrams**: Render beautiful diagrams directly in your markdown - **HTML Support**: Embed HTML snippets in your markdown - **Synchronized Scrolling**: Editor and preview scroll together - **Responsive Design**: Works on desktop and mobile devices ## Supported Languages The editor provides syntax highlighting for: - Markdown - JavaScript - Python - HTML/CSS - Go - Rust - JSON - TOML - YAML - And more! ## Technology Stack ### Frontend - **Bootstrap 5**: Modern, responsive UI framework - **CodeMirror 5**: Powerful code editor component - **Marked.js**: Fast markdown parser - **Mermaid**: Diagram and flowchart rendering - **Unpoly**: Progressive enhancement library ### Backend - **FastAPI**: Modern Python web framework - **Uvicorn**: ASGI server - **uv (Astral)**: Fast Python package installer and environment manager ## Installation & Usage ### Quick Start 1. Navigate to the project directory: ```bash cd markdown-editor ``` 2. Run the startup script: ```bash ./start.sh ``` The script will: - Install uv if not present - Create a virtual environment - Install all Python dependencies - Create a sample markdown file - Start the development server 3. Open your browser and navigate to: ``` http://localhost:8000 ``` ### Manual Installation If you prefer to install manually: ```bash # Install dependencies with uv uv venv uv pip install -e . # Start the server uv run uvicorn server:app --host 0.0.0.0 --port 8000 --reload ``` ## Project Structure ``` markdown-editor/ ├── data/ # Markdown files storage ├── static/ # Static assets │ ├── app.js # Main JavaScript application │ └── style.css # Custom styles ├── templates/ # HTML templates │ └── index.html # Main editor page ├── server.py # FastAPI backend server ├── pyproject.toml # Python project configuration ├── start.sh # Installation and startup script └── README.md # This file ``` ## API Endpoints The backend provides the following REST API endpoints: - `GET /` - Serve the main editor page - `GET /api/files` - List all markdown files - `GET /api/files/{filename}` - Get content of a specific file - `POST /api/files` - Create or update a file - `DELETE /api/files/{filename}` - Delete a file ## Usage Guide ### Creating a New File 1. Click the **New** button in the navbar 2. Enter a filename in the input field (e.g., `my-document.md`) 3. Start typing your markdown content 4. Click **Save** to save the file ### Loading an Existing File - Click on any file in the sidebar to load it into the editor ### Saving Changes - Click the **Save** button or press `Ctrl+S` (Windows/Linux) or `Cmd+S` (Mac) ### Deleting a File 1. Load the file you want to delete 2. Click the **Delete** button 3. Confirm the deletion ### Using Mermaid Diagrams Create a code block with the `mermaid` language identifier: ````markdown ```mermaid graph TD A[Start] --> B[Process] B --> C[End] ``` ```` ### Embedding HTML You can embed HTML directly in your markdown: ```markdown
This is red text!
``` ## Keyboard Shortcuts - `Ctrl+S` / `Cmd+S` - Save current file ## Development ### Requirements - Python 3.11+ - uv (Astral) - Will be installed automatically by start.sh ### Running in Development Mode The server runs with auto-reload enabled by default, so any changes to the Python code will automatically restart the server. ### Adding New Features - Frontend code: Edit `static/app.js` and `static/style.css` - Backend API: Edit `server.py` - UI layout: Edit `templates/index.html` ## Troubleshooting ### Port Already in Use If port 8000 is already in use, you can change it in `start.sh` or run manually: ```bash uv run uvicorn server:app --host 0.0.0.0 --port 8080 --reload ``` ### Dependencies Not Installing Make sure uv is properly installed: ```bash curl -LsSf https://astral.sh/uv/install.sh | sh ``` Then try running `./start.sh` again. ## License MIT License - Feel free to use this project for any purpose. ## Contributing Contributions are welcome! Feel free to submit issues or pull requests. --- **Happy writing!** 📝✨