This is a Markdown-based ticket board application with a React frontend and Express.js backend. The application allows you to manage tickets stored as Markdown files with a drag-and-drop Kanban board interface.
- Frontend: React + TypeScript + Vite + Tailwind CSS
- Backend: Express.js server with file system integration
- Data Storage: Markdown files in the
docs/CRs/directory - Real-time Updates: File watcher for automatic ticket updates
- Node.js (v18 or higher)
- npm or yarn
# Install frontend dependencies
cd md-ticket-board
bun install
# Install server dependencies
cd server
bun installTo populate the board with sample data, run:
cd server
bun run create-samplesThis will create 4 sample tickets in the docs/CRs/ directory:
- CR-A001: User authentication system (In Progress)
- CR-A002: Mobile responsive design fixes (Proposed)
- CR-A003: Comprehensive error handling (Approved)
- CR-B001: Dark mode support (Implemented)
cd md-ticket-board
bun run dev:fullThis starts both the frontend (port 5173) and backend (port 3001) servers with automatic restart on file changes.
# Terminal 1 - Frontend
cd md-ticket-board
bun run dev
# Terminal 2 - Backend
cd md-ticket-board/server
bun run devOpen your browser and navigate to: http://localhost:5173
The backend server provides the following API endpoints (proxied through the frontend):
GET /api/status- Server status and configurationGET /api/tasks- List all ticket filesGET /api/tasks/:filename- Get specific ticket contentPOST /api/tasks/save- Save ticket fileDELETE /api/tasks/:filename- Delete ticket file
md-ticket-board/
├── src/ # React frontend source code
│ ├── components/ # React components
│ ├── services/ # Business logic services
│ ├── hooks/ # Custom React hooks
│ ├── types/ # TypeScript type definitions
│ └── config/ # Configuration files
├── server/ # Express.js backend
│ ├── server.js # Main server file
│ ├── tasks/ # Markdown ticket files
│ └── createSampleTickets.js # Sample data generator
├── public/ # Static assets
└── package.json # Frontend dependencies and scripts
- Create a new Markdown file in the
docs/CRs/directory - Follow the front matter format shown in existing tickets
- The file watcher will automatically detect and load the new ticket
- Edit the Markdown files directly in
docs/CRs/ - Changes are automatically detected and reflected in the UI
- Or use the web interface to modify tickets
- Proposed → Approved → In Progress → Implemented → Closed
- Loads tickets from Markdown files
- Fallback to localStorage if files are unavailable
- Automatic ticket parsing and validation
- Monitors the tasks directory for changes
- Automatically updates the UI when files are modified
- Supports file creation, modification, and deletion
- Manages ticket state and loading
- Handles drag-and-drop operations
- Integrates with file watcher for real-time updates
- Parses front matter from Markdown files
- Converts between ticket objects and Markdown format
- Handles date parsing and validation
The application uses the following environment variables (with defaults):
PORT: Backend server port (default: 3001)VITE_API_BASE_URL: API base URL for production
The application uses Tailwind CSS for styling. Configuration is in:
tailwind.config.js- Tailwind configurationpostcss.config.js- PostCSS configurationsrc/index.css- Global styles with Tailwind imports
bun run dev- Start development serverbun run build- Build for productionbun run preview- Preview production buildbun run lint- Run ESLint
bun run start- Start production serverbun run dev- Start development server with nodemonbun run create-samples- Create sample ticket databun run test- Run testsbun run lint- Run ESLint
bun run dev:full- Start both frontend and backend in development modebun run server:dev- Start backend from root directory
-
Port Already in Use
- Change the port in
vite.config.js(frontend) orserver.js(backend) - Or kill the existing process:
lsof -ti:5173 | xargs kill -9
- Change the port in
-
File Permission Issues
- Ensure the
docs/CRs/directory is writable - Check file permissions on the project directory
- Ensure the
-
CORS Issues
- The proxy configuration in
vite.config.jshandles CORS - Make sure both servers are running when testing
- The proxy configuration in
-
Module Not Found Errors
- Run
bun installin both the root and server directories - Check that all dependencies are properly installed
- Run
Enable debug logging by setting the DEBUG environment variable:
DEBUG=* bun run dev:full# Build frontend
cd md-ticket-board
bun run build
# Start backend
cd server
npm start- Set the
VITE_API_BASE_URLenvironment variable - Ensure the tasks directory is writable
- Configure any reverse proxy as needed
- Follow the existing code style and patterns
- Add tests for new functionality
- Update documentation as needed
- Test both frontend and backend changes
This project is open source and available under the MIT License.