glancr
A modern Markdown documentation viewer built with Go and React. glancr provides a clean, fast interface for browsing and viewing Markdown documentation with live reload capabilities during development.
Features
- 🚀 Fast & Lightweight - Single binary deployment with embedded assets
- 📝 Markdown Rendering - Beautiful rendering of Markdown documents
- 🔄 Live Development - Hot reload during development
- 🎨 Modern UI - Clean, responsive React-based interface
- 📱 Mobile Friendly - Responsive design that works on all devices
- 🔧 Easy Setup - Simple development and deployment workflow
Prerequisites
- Go 1.19+
- Node.js 18+ and npm
- Git
Quick Start
Development
-
Clone the repository
git clone https://github.com/smjklake/glancr.git cd glancr -
Install dependencies
make deps -
Start development servers
make devThis will start:
- Frontend dev server at http://localhost:5173
- Backend API server at http://localhost:8080
Production Build
-
Build for production
make build-prod -
Run the binary
./dist/glancrThe application will be available at http://localhost:8080
Available Commands
Development
make dev- Start development environment with live reloadmake build-dev- Build development version (filesystem assets)make test- Run Go tests
Production
make build-prod- Build production version (embedded assets)make release- Clean build for production releasemake build-cross-prod- Build for multiple platforms
Utilities
make clean- Clean build artifactsmake clean-all- Deep clean including node_modulesmake deps- Install all dependenciesmake help- Show all available commands
Project Structure
glancr/
├── cmd/
│ └── server/ # Application entry point
│ └── main.go
├── internal/ # Private application code
│ ├── auth/ # Authentication logic
│ └── fs/ # Asset handling (dev/prod)
├── ui/ # React frontend
│ ├── src/
│ ├── public/
│ └── package.json
├── dist/ # Build output
├── Makefile # Build automation
├── dev.sh # Development script
└── go.mod # Go module definition
Architecture
glancr uses a clean architecture with clear separation between frontend and backend:
- Backend (Go): Serves the React SPA and provides API endpoints
- Frontend (React): Modern TypeScript-based UI with Vite tooling
- Asset Handling: Development mode serves from filesystem, production embeds assets in binary
- Build System: Makefile orchestrates both Go and Node.js build processes
Development Workflow
Adding Features
- Backend changes: Add logic in
internal/packages - Frontend changes: Modify React components in
ui/src/ - API endpoints: Update server routes in
cmd/server/main.go
Testing
# Run Go tests
make test
# Run with production build tags
make test-prod
# Run all tests
make test-all
Code Quality
The frontend includes:
- ESLint for code linting
- Prettier for code formatting
- TypeScript for type safety
cd ui
npm run lint # Check for linting issues
npm run lint:fix # Fix auto-fixable issues
npm run format # Format code with Prettier
Deployment
Single Binary Deployment
Build and deploy the production binary:
make release
scp dist/glancr user@server:/path/to/deployment/
Cross-Platform Builds
Generate binaries for multiple platforms:
make build-cross-prod
Produces:
glancr-linux-amd64glancr-darwin-amd64glancr-darwin-arm64glancr-windows-amd64.exe
Configuration
Currently glancr runs with minimal configuration. The server starts on port 8080 by default.
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
make test) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Development Guidelines
- Follow Go conventions and use
gofmt - Write tests for new functionality
- Use TypeScript for frontend development
- Run
make lintbefore committing - Keep commits atomic and well-described
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
glancr - Making documentation beautiful, one markdown file at a time. ✨