Let's try it out: Live Demo
A visual blog editor for static blogs with GitHub integration. Works with Astro, Hugo, Jekyll, Eleventy, Gatsby, and any static site generator that uses Markdown files. Manage your blog content through an elegant web interface with Markdown editing, image uploads, and real-time preview.
- GitHub Integration: Direct management of blog content via GitHub API
- Visual Editor: Markdown editor with live preview
- Image Upload: Drag & drop image uploads with automatic optimization
- Frontmatter Management: Visual form for post metadata (title, description, date, tags)
- Draft Support: Save posts as drafts before publishing
- Local Draft Recovery: Automatically saves drafts locally and recovers unsaved work
- Dark Mode: Full dark mode support
- Responsive Design: Works on desktop and mobile devices
The project consists of two parts:
- Python FastAPI server
- GitHub OAuth authentication
- PyGithub for repository management
- Image processing with Pillow
- Next.js 14 with App Router
- shadcn/ui components
- Tailwind CSS styling
- React Query for data fetching
- Zustand for state management
- Python 3.11+
- Node.js 18+
- GitHub OAuth App credentials
cd blog-editor-api
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# Edit .env with your credentials
uvicorn app.main:app --reload --port 8000cd blog-editor-web
npm install
npm run devVisit http://localhost:3000 to use the editor.
- Go to GitHub Settings → Developer settings → OAuth Apps
- Create new OAuth App with:
- Homepage URL:
http://localhost:3000 - Callback URL:
http://localhost:8000/api/auth/callback
- Homepage URL:
- Copy Client ID and Client Secret to backend
.env
See individual README files in blog-editor-api/ and blog-editor-web/ for detailed configuration.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/auth/login | Start GitHub OAuth flow |
| GET | /api/auth/callback | OAuth callback handler |
| GET | /api/auth/me | Get current user |
| GET | /api/posts | List all posts |
| GET | /api/posts/{slug} | Get single post |
| POST | /api/posts | Create new post |
| PUT | /api/posts/{slug} | Update post |
| DELETE | /api/posts/{slug} | Delete post |
| POST | /api/images/upload/{slug} | Upload image |
- Click the button above to deploy
- Set
NEXT_PUBLIC_API_URLto your backend URL - Deploy
- Click the button above to deploy
- Set environment variables (see
.env.example) - Update GitHub OAuth callback URL to match your Railway domain
See CONTRIBUTING.md for guidelines on how to contribute to this project.
See SECURITY.md for our security policy and how to report vulnerabilities.
This project is licensed under the MIT License - see the LICENSE file for details.
