{"id":51433052,"url":"https://github.com/dannyswat/pjeasy","last_synced_at":"2026-07-05T05:03:12.671Z","repository":{"id":331628839,"uuid":"1131640817","full_name":"dannyswat/pjeasy","owner":"dannyswat","description":"An all-in-one project management tool for IT team","archived":false,"fork":false,"pushed_at":"2026-06-21T03:48:03.000Z","size":1548,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-21T05:21:07.372Z","etag":null,"topics":["documentation","project-management","service-desk"],"latest_commit_sha":null,"homepage":"https://pjeasy.dannyswat.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dannyswat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-10T12:16:09.000Z","updated_at":"2026-06-21T03:48:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dannyswat/pjeasy","commit_stats":null,"previous_names":["dannyswat/pjeasy"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dannyswat/pjeasy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannyswat%2Fpjeasy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannyswat%2Fpjeasy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannyswat%2Fpjeasy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannyswat%2Fpjeasy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dannyswat","download_url":"https://codeload.github.com/dannyswat/pjeasy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dannyswat%2Fpjeasy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35143802,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-05T02:00:06.290Z","response_time":100,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["documentation","project-management","service-desk"],"created_at":"2026-07-05T05:03:12.057Z","updated_at":"2026-07-05T05:03:12.660Z","avatar_url":"https://github.com/dannyswat.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PJEasy\n\nPJEasy is a full-stack project management system for internal software and IT teams. It combines project planning, delivery tracking, service desk workflows, wiki/documentation, sprint execution, and review/release management in one application.\n\n## What It Does\n\nPJEasy is built around project workspaces. Inside each project, teams can manage:\n\n- Ideas\n- Features\n- Issues\n- Tasks\n- Service tickets\n- Sprints and sprint boards\n- Releases\n- Reviews\n- Wiki pages and proposed wiki changes\n- Comments and status history\n- Custom status workflows by item type\n\nThe backend also includes workflow automation so status changes can trigger follow-up actions, such as fulfilling a linked service ticket or closing a parent item when all related work is complete.\n\n## Main Features\n\n### Authentication and Access\n\n- User registration and login with JWT-based sessions\n- Refresh-token based session renewal\n- System admin management\n- Project-level membership and permissions\n- Project roles for admins, members, and limited project users\n\n### Project Workspace\n\n- Create and update projects\n- Add and manage project members\n- Archive and unarchive projects\n- Project dashboard views for managers and members\n- Auto-generated project item reference sequences\n\n### Delivery Management\n\n- Track ideas, features, issues, tasks, and service tickets\n- Link work items together\n- Assign owners and update statuses\n- Batch status updates for several item types\n- Record status change history\n- Filter and paginate item lists\n\n### Sprint, Review, and Release Flow\n\n- Create and manage sprints\n- Start and close sprints\n- View sprint board and swimlane data\n- Move tasks into and out of sprints\n- Create sprint and custom reviews\n- Publish reviews for stakeholder sharing\n- Group completed work into releases and mark releases complete\n\n### Wiki and Collaboration\n\n- Project wiki with nested page trees\n- Rich HTML content editing with centralized sanitization\n- Change proposal flow for wiki edits\n- Merge task-related wiki changes automatically when work is completed\n- Comments on project items and wiki pages\n- Image upload support for editor content\n\n### Workflow and Governance\n\n- Project-specific status transition rules for ideas, features, issues, tasks, service tickets, and releases\n- Default workflow automations for linked work items\n- Backend-enforced permissions and transition validation\n\n## Tech Stack\n\n| Layer | Stack |\n| --- | --- |\n| Frontend | React 19, TypeScript, Vite, Tailwind CSS, TanStack Query |\n| Backend | Go 1.24, Echo, GORM |\n| Database | PostgreSQL |\n| Auth | JWT access + refresh tokens |\n| Deployment | Local dev, Docker image |\n\n## Repository Layout\n\n```text\nbackend/   Go API server, domain services, persistence, workflow engine\nfrontend/  React application\nuploads/   Uploaded images\n```\n\n## Prerequisites\n\n- Node.js 22+\n- npm\n- Go 1.24+\n- PostgreSQL 14+ or compatible\n\n## Local Development\n\n### 1. Create the database\n\nCreate a PostgreSQL database named `pjeasy` and make sure the configured user can access it.\n\nThe default backend configuration expects:\n\n- Host: `localhost`\n- Port: `5432`\n- User: `postgres`\n- Password: `postgres`\n- Database: `pjeasy`\n\nYou can change these values in [backend/config.json](./backend/config.json).\n\n### 2. Start the backend\n\n```bash\ncd backend\ngo run ./cmd/api -config config.json\n```\n\nNotes:\n\n- The API listens on `http://localhost:8080` by default.\n- Auto-migration is enabled in the default config.\n- If the config file is missing, the backend falls back to built-in defaults.\n\n### 3. Start the frontend\n\n```bash\ncd frontend\nnpm install\nnpm run dev\n```\n\nNotes:\n\n- The Vite dev server runs on `http://localhost:3002`.\n- Frontend requests to `/api` and `/uploads` are proxied to `http://localhost:8080`.\n\n## First-Time Usage\n\n1. Open `http://localhost:3002`.\n2. Register a user account.\n3. Sign in with that account.\n4. Create a project.\n5. Add project members from the project settings page.\n6. Start working with ideas, issues, features, tasks, tickets, wiki pages, sprints, reviews, and releases.\n\nImportant behavior:\n\n- The user who creates a project becomes that project's admin automatically.\n- Passwords must be at least 8 characters and include uppercase, lowercase, numeric, and special characters.\n\n## How To Use PJEasy\n\n### Standard team flow\n\n1. Create a project and add members.\n2. Capture incoming requests as service tickets or ideas.\n3. Convert or break work down into features, issues, and tasks.\n4. Organize tasks into sprints.\n5. Track progress through project dashboards, item lists, and sprint boards.\n6. Document decisions and implementation details in the wiki.\n7. Generate sprint or custom reviews.\n8. Collect completed work into releases.\n\n### Status workflows\n\nProject admins can define allowed status transitions per item type from the project settings area. If no rule exists for a given item type and current status, transitions remain unrestricted.\n\n### Wiki change workflow\n\nWiki pages support change proposals and pending changes. This makes it possible to review documentation updates before merging them into the main page content.\n\n## Docker\n\nThe repository includes a multi-stage Dockerfile that:\n\n- Builds the frontend\n- Builds the backend binary\n- Serves the compiled frontend from the Go server\n\nBuild the image locally:\n\n```bash\ndocker build -t pjeasy:local .\n```\n\nRun it:\n\n```bash\ndocker run --rm -p 8080:8080 pjeasy:local\n```\n\n### Docker Compose\n\nFor the easiest local Docker setup, use [docker-compose.yml](./docker-compose.yml):\n\n```bash\ndocker compose up --build\n```\n\nThis starts:\n\n- PostgreSQL on `localhost:5432`\n- PJEasy on `http://localhost:8080`\n\nThe compose stack uses [config.compose.json](./config.compose.json), which points the app container at the `postgres` service.\n\nNotes:\n\n- The default Docker config is [config.docker.json](./config.docker.json).\n- The compose config is [config.compose.json](./config.compose.json).\n- In Docker, the backend serves the built frontend from `frontend/dist`.\n- The bundled Docker config expects PostgreSQL to be reachable from the container at `172.17.0.1:5432`.\n\nFor publishing the container image, use:\n\n```bash\n./deploy.sh \u003cversion\u003e\n```\n\n## Validation Commands\n\nBackend:\n\n```bash\ncd backend\ngo test ./...\n```\n\nFrontend:\n\n```bash\ncd frontend\nnpm run build\n```\n\n## Current Implementation Notes\n\n- Backend HTML editor fields are sanitized before persistence.\n- Status workflow rules are stored per project and enforced in backend services.\n- Wiki pages support nested trees through parent-child relationships.\n- Project user permissions are intentionally limited compared with project admins and regular members.\n\n## Configuration Files\n\n- [backend/config.json](./backend/config.json): local backend settings\n- [config.compose.json](./config.compose.json): Docker Compose runtime settings\n- [config.docker.json](./config.docker.json): Docker runtime settings\n- [frontend/vite.config.ts](./frontend/vite.config.ts): frontend dev server and proxy settings\n\n## License\n\nThis project is dual-licensed. You may choose either:\n\n- **AGPLv3**: Use the project under the terms of the GNU Affero General Public License version 3. See [LICENSE](./LICENSE) for the full AGPLv3 text and details about network-service obligations.\n- **Commercial license**: If AGPLv3's obligations are not acceptable for your use case (for example, running proprietary network services without publishing source), contact the project maintainers to negotiate a commercial license.\n\nFor questions about licensing or to request a commercial license, contact the maintainers listed in the project repository.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdannyswat%2Fpjeasy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdannyswat%2Fpjeasy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdannyswat%2Fpjeasy/lists"}