{"id":13815802,"url":"https://github.com/Worklenz/worklenz","last_synced_at":"2025-05-15T09:34:06.620Z","repository":{"id":240031571,"uuid":"801379289","full_name":"Worklenz/worklenz","owner":"Worklenz","description":"All in one project management tool for efficient teams","archived":false,"fork":false,"pushed_at":"2024-10-25T11:27:25.000Z","size":4846,"stargazers_count":1025,"open_issues_count":24,"forks_count":72,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-11-11T15:11:43.522Z","etag":null,"topics":["angular","expressjs","postgresql","project-management","resource-management","rest-api","scheduler","task-management","time-tracking","typescript"],"latest_commit_sha":null,"homepage":"https://worklenz.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Worklenz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2024-05-16T05:51:01.000Z","updated_at":"2024-11-11T08:27:24.000Z","dependencies_parsed_at":"2024-06-04T06:46:47.939Z","dependency_job_id":null,"html_url":"https://github.com/Worklenz/worklenz","commit_stats":null,"previous_names":["worklenz/worklenz"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Worklenz%2Fworklenz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Worklenz%2Fworklenz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Worklenz%2Fworklenz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Worklenz%2Fworklenz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Worklenz","download_url":"https://codeload.github.com/Worklenz/worklenz/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225342857,"owners_count":17459487,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["angular","expressjs","postgresql","project-management","resource-management","rest-api","scheduler","task-management","time-tracking","typescript"],"created_at":"2024-08-04T04:04:04.676Z","updated_at":"2025-05-15T09:34:06.612Z","avatar_url":"https://github.com/Worklenz.png","language":"TypeScript","readme":"\u003ch1 align=\"center\"\u003e\n    \u003ca href=\"https://worklenz.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n        \u003cimg src=\"https://app.worklenz.com/assets/icons/icon-144x144.png\" alt=\"Worklenz Logo\" width=\"75\"\u003e\n    \u003c/a\u003e\n    \u003cbr\u003e\n    Worklenz    \n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://worklenz.com/task-management/\"\u003eTask Management\u003c/a\u003e |\n    \u003ca href=\"https://worklenz.com/time-tracking/\"\u003eTime Tracking\u003c/a\u003e |\n    \u003ca href=\"https://worklenz.com/analytics/\"\u003eAnalytics\u003c/a\u003e |\n    \u003ca href=\"https://worklenz.com/resource-management/\"\u003eResource Management\u003c/a\u003e |\n    \u003ca href=\"https://worklenz.com/templates/\"\u003eProject Templates\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://worklenz.com\" target=\"_blank\"\u003e\n      \u003cimg\n        src=\"https://worklenz.s3.amazonaws.com/assets/screenshots/hero-view.png\"\n        alt=\"Worklenz\"\n        width=\"1200\"\n      /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\nWorklenz is a project management tool designed to help organizations improve their efficiency. It provides a\ncomprehensive solution for managing projects, tasks, and collaboration within teams.\n\n## Features\n\n- **Project Planning**: Create and organize projects, assign tasks to team members.\n- **Task Management**: Break down projects into smaller tasks, set due dates, priorities, and track progress.\n- **Collaboration**: Share files, leave comments, and communicate seamlessly with your team members.\n- **Time Tracking**: Monitor time spent on tasks and projects for better resource allocation and billing.\n- **Reporting**: Generate detailed reports on project status, team workload, and performance metrics.\n\n## Tech Stack\n\nThis repository contains the frontend and backend code for Worklenz.\n\n- **Frontend**: Built using React with Ant Design as the UI library.\n- **Backend**: Built using TypeScript, Express.js, with PostgreSQL as the database.\n\n## Requirements\n\n- Node.js version v18 or newer\n- PostgreSQL version v15 or newer\n- Docker and Docker Compose (for containerized setup)\n\n## Getting Started\n\nThese instructions will help you set up and run the Worklenz project on your local machine for development and testing purposes.\n\n### Prerequisites\n\n- Node.js (version 18 or higher)\n- PostgreSQL database\n- An S3-compatible storage service (like MinIO) or Azure Blob Storage\n\n### Option 1: Manual Installation\n\n1. Clone the repository\n```bash\ngit clone https://github.com/Worklenz/worklenz.git\ncd worklenz\n```\n\n2. Set up environment variables\n   - Copy the example environment files\n   ```bash\n   cp .env.example .env\n   cp worklenz-backend/.env.example worklenz-backend/.env\n   ```\n   - Update the environment variables with your configuration\n\n3. Install dependencies\n```bash\n# Install backend dependencies\ncd worklenz-backend\nnpm install\n\n# Install frontend dependencies\ncd ../worklenz-frontend\nnpm install\n```\n\n4. Set up the database\n```bash\n# Create a PostgreSQL database named worklenz_db\ncd worklenz-backend\n\n# Execute the SQL setup files in the correct order\npsql -U your_username -d worklenz_db -f database/sql/0_extensions.sql\npsql -U your_username -d worklenz_db -f database/sql/1_tables.sql\npsql -U your_username -d worklenz_db -f database/sql/indexes.sql\npsql -U your_username -d worklenz_db -f database/sql/4_functions.sql\npsql -U your_username -d worklenz_db -f database/sql/triggers.sql\npsql -U your_username -d worklenz_db -f database/sql/3_views.sql\npsql -U your_username -d worklenz_db -f database/sql/2_dml.sql\npsql -U your_username -d worklenz_db -f database/sql/5_database_user.sql\n```\n\n5. Start the development servers\n```bash\n# In one terminal, start the backend\ncd worklenz-backend\nnpm run dev\n\n# In another terminal, start the frontend\ncd worklenz-frontend\nnpm run dev\n```\n\n6. Access the application at http://localhost:5000\n\n### Option 2: Docker Setup\n\nThe project includes a fully configured Docker setup with:\n- Frontend React application\n- Backend server\n- PostgreSQL database\n- MinIO for S3-compatible storage\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/Worklenz/worklenz.git\ncd worklenz\n```\n\n2. Start the Docker containers (choose one option):\n\n**Using Docker Compose directly**\n```bash\ndocker-compose up -d\n```\n\n3. The application will be available at:\n   - Frontend: http://localhost:5000\n   - Backend API: http://localhost:3000\n   - MinIO Console: http://localhost:9001 (login with minioadmin/minioadmin)\n\n4. To stop the services:\n```bash\ndocker-compose down\n```\n\n## Configuration\n\n### Environment Variables\n\nWorklenz requires several environment variables to be configured for proper operation. These include:\n\n- Database credentials\n- Session secrets\n- Storage configuration (S3 or Azure)\n- Authentication settings\n\nPlease refer to the `.env.example` files for a full list of required variables.\n\n### MinIO Integration\n\nThe project uses MinIO as an S3-compatible object storage service, which provides an open-source alternative to AWS S3 for development and production.\n\n- **MinIO Console**: http://localhost:9001\n  - Username: minioadmin\n  - Password: minioadmin\n\n- **Default Bucket**: worklenz-bucket (created automatically when the containers start)\n\n### Security Considerations\n\nFor production deployments:\n\n1. Use strong, unique passwords and keys for all services\n2. Do not commit `.env` files to version control\n3. Use a production-grade PostgreSQL setup with proper backup procedures\n4. Enable HTTPS for all public endpoints\n5. Review and update dependencies regularly\n\n## Contributing\n\nWe welcome contributions from the community! If you'd like to contribute, please follow our [contributing guidelines](CONTRIBUTING.md).\n\n## Security\n\nIf you believe you have found a security vulnerability in Worklenz, we encourage you to responsibly disclose this and not open a public issue. We will investigate all legitimate reports.\n\nEmail [info@worklenz.com](mailto:info@worklenz.com) to disclose any security vulnerabilities.\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n\n## Screenshots\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://worklenz.com/features/task-management/\" target=\"_blank\"\u003e\n    \u003cimg\n      src=\"https://worklenz.s3.amazonaws.com/assets/screenshots/task-views-view.png\"\n      alt=\"Worklenz task views\"\n      width=\"1024\"\n    /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://worklenz.com/features/time-tracking/\" target=\"_blank\"\u003e\n    \u003cimg\n      src=\"https://worklenz.s3.amazonaws.com/assets/screenshots/time-tracking-view.png\"\n      alt=\"Worklenz time tracking\"\n      width=\"1024\"\n    /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://worklenz.com/features/analytics/\" target=\"_blank\"\u003e\n    \u003cimg\n      src=\"https://worklenz.s3.amazonaws.com/assets/screenshots/analytics-view.png\"\n      alt=\"Worklenz analytics\"\n      width=\"1024\"\n    /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://worklenz.com/features/resource-management/\" target=\"_blank\"\u003e\n    \u003cimg\n      src=\"https://worklenz.s3.amazonaws.com/assets/screenshots/schedule-view.png\"\n      alt=\"Worklenz scheduler\"\n      width=\"1024\"\n    /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://worklenz.com/features/templates/\" target=\"_blank\"\u003e\n    \u003cimg\n      src=\"https://worklenz.s3.amazonaws.com/assets/screenshots/templates-view.png\"\n      alt=\"Worklenz templates\"\n      width=\"1024\"\n    /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n### Contributing\n\nWe welcome contributions from the community! If you'd like to contribute, please follow\nour [contributing guidelines](CONTRIBUTING.md).\n\n### License\n\nWorklenz is open source and released under the [GNU Affero General Public License Version 3 (AGPLv3)](LICENSE).\n\nBy contributing to Worklenz, you agree that your contributions will be licensed under its AGPL.\n\n# Worklenz React\n\nThis repository contains the React version of Worklenz with a Docker setup for easy development and deployment.\n\n## Getting Started with Docker\n\nThe project includes a fully configured Docker setup with:\n- Frontend React application\n- Backend server\n- PostgreSQL database\n- MinIO for S3-compatible storage\n\n### Prerequisites\n\n- Docker and Docker Compose installed on your system\n- Git\n\n### Quick Start\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/Worklenz/worklenz.git\ncd worklenz\n```\n\n2. Start the Docker containers (choose one option):\n\n**Option 1: Using the provided scripts (easiest)**\n- On Windows:\n  ```\n  start.bat\n  ```\n- On Linux/macOS:\n  ```bash\n  ./start.sh\n  ```\n\n**Option 2: Using Docker Compose directly**\n```bash\ndocker-compose up -d\n```\n\n3. The application will be available at:\n   - Frontend: http://localhost:5000\n   - Backend API: http://localhost:3000\n   - MinIO Console: http://localhost:9001 (login with minioadmin/minioadmin)\n\n4. To stop the services (choose one option):\n\n**Option 1: Using the provided scripts**\n- On Windows:\n  ```\n  stop.bat\n  ```\n- On Linux/macOS:\n  ```bash\n  ./stop.sh\n  ```\n\n**Option 2: Using Docker Compose directly**\n```bash\ndocker-compose down\n```\n\n## MinIO Integration\n\nThe project uses MinIO as an S3-compatible object storage service, which provides an open-source alternative to AWS S3 for development and production.\n\n### Working with MinIO\n\nMinIO provides an S3-compatible API, so any code that works with S3 will work with MinIO by simply changing the endpoint URL. The backend has been configured to use MinIO by default, with no additional configuration required.\n\n- **MinIO Console**: http://localhost:9001\n  - Username: minioadmin\n  - Password: minioadmin\n\n- **Default Bucket**: worklenz-bucket (created automatically when the containers start)\n\n### Backend Storage Configuration\n\nThe backend is pre-configured to use MinIO with the following settings:\n\n```javascript\n// S3 credentials with MinIO defaults\nexport const REGION = process.env.AWS_REGION || \"us-east-1\";\nexport const BUCKET = process.env.AWS_BUCKET || \"worklenz-bucket\";\nexport const S3_URL = process.env.S3_URL || \"http://minio:9000/worklenz-bucket\";\nexport const S3_ACCESS_KEY_ID = process.env.AWS_ACCESS_KEY_ID || \"minioadmin\";\nexport const S3_SECRET_ACCESS_KEY = process.env.AWS_SECRET_ACCESS_KEY || \"minioadmin\";\n```\n\nThe S3 client is initialized with special MinIO configuration:\n\n```javascript\nconst s3Client = new S3Client({\n  region: REGION,\n  credentials: {\n    accessKeyId: S3_ACCESS_KEY_ID || \"\",\n    secretAccessKey: S3_SECRET_ACCESS_KEY || \"\",\n  },\n  endpoint: getEndpointFromUrl(), // Extracts endpoint from S3_URL\n  forcePathStyle: true, // Required for MinIO\n});\n```\n\n### Environment Configuration\n\nThe project uses the following environment file structure:\n\n- **Frontend**:\n  - `worklenz-frontend/.env.development` - Development environment variables\n  - `worklenz-frontend/.env.production` - Production build variables\n  \n- **Backend**:\n  - `worklenz-backend/.env` - Backend environment variables\n\n### Setting Up Environment Files\n\nThe Docker environment script will create or overwrite all environment files:\n\n```bash\n# For HTTP/WS\n./update-docker-env.sh your-hostname\n\n# For HTTPS/WSS\n./update-docker-env.sh your-hostname true\n```\n\nThis script generates properly configured environment files for both development and production environments.\n\n## Docker Deployment\n\n### Local Development with Docker\n\n1. Set up the environment files:\n   ```bash\n   # For HTTP/WS\n   ./update-docker-env.sh\n   \n   # For HTTPS/WSS\n   ./update-docker-env.sh localhost true\n   ```\n\n2. Run the application using Docker Compose:\n   ```bash\n   docker-compose up -d\n   ```\n\n3. Access the application:\n   - Frontend: http://localhost:5000\n   - Backend API: http://localhost:3000 (or https://localhost:3000 with SSL)\n\n### Remote Server Deployment\n\nWhen deploying to a remote server:\n\n1. Set up the environment files with your server's hostname:\n   ```bash\n   # For HTTP/WS\n   ./update-docker-env.sh your-server-hostname\n   \n   # For HTTPS/WSS\n   ./update-docker-env.sh your-server-hostname true\n   ```\n   \n   This ensures that the frontend correctly connects to the backend API.\n\n2. Pull and run the latest Docker images:\n   ```bash\n   docker-compose pull\n   docker-compose up -d\n   ```\n\n3. Access the application through your server's hostname:\n   - Frontend: http://your-server-hostname:5000\n   - Backend API: http://your-server-hostname:3000\n\n### Environment Configuration\n\nThe Docker setup uses environment variables to configure the services:\n\n- Frontend:\n  - `VITE_API_URL`: URL of the backend API (default: http://backend:3000 for container networking)\n  - `VITE_SOCKET_URL`: WebSocket URL for real-time communication (default: ws://backend:3000)\n\n- Backend:\n  - Database connection parameters\n  - Storage configuration\n  - Other backend settings\n\nFor custom configuration, edit the `.env` file or the `update-docker-env.sh` script.\n\n","funding_links":[],"categories":["TypeScript","Table of Contents"],"sub_categories":["Project Management"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FWorklenz%2Fworklenz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FWorklenz%2Fworklenz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FWorklenz%2Fworklenz/lists"}