reinit
This commit is contained in:
commit
ad8c238e78
53 changed files with 10091 additions and 0 deletions
217
README.md
Normal file
217
README.md
Normal file
|
@ -0,0 +1,217 @@
|
|||
# GoCheck - Collaborative Checklist Application
|
||||
|
||||
A real-time collaborative checklist application built with Go and React, featuring Server-Sent Events (SSE) for live updates and SQLite for data persistence.
|
||||
|
||||
## Features
|
||||
|
||||
- Create and manage checklists
|
||||
- Add, update, and delete checklist items
|
||||
- Real-time collaboration with Server-Sent Events
|
||||
- Item locking mechanism to prevent conflicts
|
||||
- **Item dependencies**: Define prerequisites for completing items
|
||||
- **Date constraints**: Set "not before" and "not after" times for item completion
|
||||
- Modern web frontend with React, TypeScript, and Radix UI
|
||||
- Real-time updates across multiple browser tabs/windows
|
||||
- SSE-first architecture: All data flows through Server-Sent Events
|
||||
- Export/Import checklists as JSON
|
||||
|
||||
## Architecture
|
||||
|
||||
### Project Structure
|
||||
|
||||
```
|
||||
gocheck/
|
||||
├── backend/ # Go server code
|
||||
│ ├── main.go
|
||||
│ ├── go.mod
|
||||
│ ├── database/ # SQLite database handling
|
||||
│ ├── handlers/ # HTTP and SSE handlers
|
||||
│ ├── models/ # Data models
|
||||
│ ├── sse/ # Server-Sent Events implementation
|
||||
│ └── static/ # Static file serving
|
||||
├── frontend/ # React TypeScript application
|
||||
│ ├── src/
|
||||
│ ├── package.json
|
||||
│ └── vite.config.ts
|
||||
├── build.sh # Build script for production
|
||||
├── dev.sh # Development script with hot reload
|
||||
└── Containerfile # Multi-stage container build
|
||||
```
|
||||
|
||||
### SSE-First Design
|
||||
|
||||
This application follows an **SSE-first architecture** where all checklist data flows through Server-Sent Events:
|
||||
|
||||
- **No polling**: The frontend never polls for data updates
|
||||
- **Real-time state management**: The frontend maintains state purely through SSE events
|
||||
- **Immediate updates**: Changes appear instantly across all connected clients
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Go 1.24 or later
|
||||
- Node.js 22+ and npm
|
||||
- SQLite3 (included with Go)
|
||||
|
||||
## Setup and Development
|
||||
|
||||
### Quick Start
|
||||
|
||||
1. **Clone the repository**
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd gocheck
|
||||
```
|
||||
|
||||
2. **Development mode** (with hot reload):
|
||||
```bash
|
||||
./dev.sh
|
||||
```
|
||||
This starts both backend (port 8080) and frontend (port 5173) with hot reloading.
|
||||
|
||||
3. **Production build**:
|
||||
```bash
|
||||
./build.sh
|
||||
./gocheck
|
||||
```
|
||||
The server will start on `http://localhost:8080`
|
||||
|
||||
### Manual Development Setup
|
||||
|
||||
#### Backend
|
||||
```bash
|
||||
cd backend
|
||||
go mod download
|
||||
air # For hot reload (requires Air to be installed)
|
||||
# or
|
||||
go run main.go
|
||||
```
|
||||
|
||||
#### Frontend
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run dev # Development server on port 5173
|
||||
npm run build # Production build
|
||||
npm run lint # Check code quality
|
||||
```
|
||||
|
||||
## Deployment
|
||||
|
||||
### Binary Deployment
|
||||
|
||||
The application builds as a single binary with embedded static files:
|
||||
|
||||
```bash
|
||||
# Build for current platform
|
||||
./build.sh
|
||||
|
||||
# Cross-platform builds
|
||||
cd backend
|
||||
GOOS=linux GOARCH=amd64 go build -o gocheck-linux
|
||||
GOOS=windows GOARCH=amd64 go build -o gocheck.exe
|
||||
GOOS=darwin GOARCH=amd64 go build -o gocheck-macos
|
||||
```
|
||||
|
||||
### Container Deployment
|
||||
|
||||
Build and run with Podman or Docker:
|
||||
|
||||
```bash
|
||||
# Using the build script
|
||||
./build-and-push.sh
|
||||
|
||||
# Manual build
|
||||
podman build -t gocheck -f Containerfile .
|
||||
podman run -d --name gocheck -p 8080:8080 -v gocheck-data:/app/backend/data gocheck
|
||||
|
||||
# With custom port
|
||||
podman run -d --name gocheck -p 3000:8080 -e PORT=8080 -v gocheck-data:/app/backend/data gocheck
|
||||
```
|
||||
|
||||
## API Endpoints
|
||||
|
||||
All endpoints return consistent JSON responses:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "Operation completed",
|
||||
"data": {}
|
||||
}
|
||||
```
|
||||
|
||||
### Endpoints
|
||||
|
||||
- `POST /api/checklists` - Create a new checklist
|
||||
- `PATCH /api/checklists/{uuid}/name` - Update checklist name
|
||||
- `POST /api/checklists/{uuid}/items` - Add an item
|
||||
- `PATCH /api/checklists/{uuid}/items/{id}` - Update an item
|
||||
- `DELETE /api/checklists/{uuid}/items/{id}` - Delete an item
|
||||
- `POST /api/checklists/{uuid}/items/{id}/lock` - Lock an item for editing
|
||||
- `GET /api/checklists/{uuid}/sse` - SSE stream for real-time updates
|
||||
|
||||
## Frontend Features
|
||||
|
||||
Built with modern web technologies:
|
||||
- **React 18** with TypeScript
|
||||
- **Radix UI** for accessible, customizable components
|
||||
- **Tailwind CSS** for styling
|
||||
- **Vite** for fast development and building
|
||||
- **React Router** for client-side routing
|
||||
|
||||
### Key Features
|
||||
|
||||
- **Home Page**: Create new checklists and manage saved ones
|
||||
- **Checklist Page**: Real-time collaborative editing
|
||||
- **Local Storage**: Automatically saves checklist references
|
||||
- **Export/Import**: Save and load checklists as JSON files
|
||||
- **Mobile Friendly**: Responsive design with native date/time inputs
|
||||
|
||||
## Database
|
||||
|
||||
SQLite databases are stored in `backend/data/` with one database per checklist:
|
||||
|
||||
- `checklist_info` - Checklist metadata
|
||||
- `items` - Checklist items with dependencies and date constraints
|
||||
- `dependencies` - Item dependency relationships
|
||||
|
||||
## Item Dependencies
|
||||
|
||||
Items can depend on other items being completed first:
|
||||
|
||||
1. Click the link icon (🔗) on any item
|
||||
2. Select which items must be completed first
|
||||
3. Items with unmet dependencies cannot be checked off
|
||||
4. Visual indicators show dependency status
|
||||
|
||||
## Date Constraints
|
||||
|
||||
Set time windows for when items can be completed:
|
||||
|
||||
1. Click the clock icon (🕐) on any item
|
||||
2. Set "not before" and/or "not after" times
|
||||
3. Quick select buttons for common timeframes
|
||||
4. Items cannot be completed outside their time window
|
||||
|
||||
## Development Tools
|
||||
|
||||
### Scripts
|
||||
|
||||
- `./dev.sh` - Start development environment with hot reload
|
||||
- `./build.sh` - Build production binary
|
||||
- `./build-and-push.sh` - Build and push container images
|
||||
|
||||
### Environment Variables
|
||||
|
||||
- `PORT` - Server port (default: 8080)
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Follow the existing code style
|
||||
2. Use ESLint for frontend code (no semicolons)
|
||||
3. Test changes in both development and production modes
|
||||
4. Ensure cross-platform compatibility
|
||||
|
||||
## License
|
||||
|
||||
[Add your license here]
|
Loading…
Add table
Add a link
Reference in a new issue