{"id":31235464,"url":"https://github.com/elnurvl/tasker","last_synced_at":"2026-04-11T10:37:30.548Z","repository":{"id":314823819,"uuid":"1056871991","full_name":"elnurvl/tasker","owner":"elnurvl","description":"A simple task management platform, built with Laravel to demonstrate tools and techniques used in professional product development workflows","archived":false,"fork":false,"pushed_at":"2025-09-15T01:14:08.000Z","size":159,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-15T03:22:52.278Z","etag":null,"topics":["docker","keycloak","laravel","nginx","oauth2","openapi","openidconnect","sample","tdd","todo"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elnurvl.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":"2025-09-15T00:48:21.000Z","updated_at":"2025-09-15T01:14:11.000Z","dependencies_parsed_at":"2025-09-15T03:23:00.711Z","dependency_job_id":"7858f531-fa4b-4e6f-b53d-21f24bd86659","html_url":"https://github.com/elnurvl/tasker","commit_stats":null,"previous_names":["elnurvl/tasker"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/elnurvl/tasker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elnurvl%2Ftasker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elnurvl%2Ftasker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elnurvl%2Ftasker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elnurvl%2Ftasker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elnurvl","download_url":"https://codeload.github.com/elnurvl/tasker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elnurvl%2Ftasker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31677819,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T08:18:19.405Z","status":"ssl_error","status_checked_at":"2026-04-11T08:17:08.892Z","response_time":54,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["docker","keycloak","laravel","nginx","oauth2","openapi","openidconnect","sample","tdd","todo"],"created_at":"2025-09-22T14:29:25.700Z","updated_at":"2026-04-11T10:37:30.540Z","avatar_url":"https://github.com/elnurvl.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Introduction\n\nThis is a resource-based API server for **Tasker**, a simple task management platform, built with Laravel\nto demonstrate tools and techniques used in professional product development workflows.\n\nThe API is fully compliant with *OpenAPI 3.1* standard: you can access the documentation at `https://tasker.test/docs/api`.\nThe page provides an option to download the specification file, so you can import it into Postman to generate the collection\nor use it to generate the client code of corresponding web/mobile applications.\n\n### Authentication\nThe project uses [Keycloak](#keycloak) as an *authorization server*, therefore,\nthe *resource server* (the Laravel application) will not store user credentials nor issue any kind of authorization token.\nYou need to send a bearer token issued by the authorization server in the `Authorization` header of requests to the resource server.\nTo obtain the token you can use [Authorization Code with PKCE](https://datatracker.ietf.org/doc/html/rfc7636) with `client_id:web`.\nOpenID Connect Discovery document can be found at `https://tasker.test/auth/realms/sso/.well-known/openid-configuration`\n\n---\n\n_**DISCLOSURE:** No AI agent had been used to write or modify any content in this repository.\nHowever, LLM platforms, such as ChatGPT and Grok was used along with search engines for\nidentifying some code-related issues encountered during the development as well as potential solutions for them;\ndiscovering some features of the framework and the other libraries missing or difficult to find in their official documentation;\nand helping with the translation. This disclosure will be kept updated to reflect the latest situation._\n\n---\n# Setup\n\n## Prerequisites\n\n### Mac\n\n##### Requirements:\n\n- [Homebrew](https://brew.sh) — can be installed from **Terminal** as shown below:\n    ```shell\n    /bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"\n    (echo; echo 'eval \"$(/opt/homebrew/bin/brew shellenv)\"') \u003e\u003e ~/.zprofile\n    eval \"$(/opt/homebrew/bin/brew shellenv)\"\n    ```\n\nOpen **Terminal** and run the below command to install Docker:\n```shell\nbrew install --cask docker\n```\n\n---\n### Windows\n\n##### Requirements:\n\n- [winget](https://apps.microsoft.com/detail/9NBLGGH4NNS1)\n- [WSL (Windows Subsystem for Linux)](https://apps.microsoft.com/detail/9P9TQF7MRM4R)\n\n##### Recommended tools:\n\n- [Windows Terminal](https://apps.microsoft.com/detail/9N0DX20HK701)\n\nOpen **Terminal**(or **PowerShell** if you don't have it) and run the below commands:\n\n1. **Install OpenSSL:**\n   ```shell\n   winget install FireDaemon.OpenSSL\n   ```\n2. **Install WSL and Ubuntu Distro:**\n   ```shell\n   wsl --install\n   ```\n   After restarting your PC, you'll get asked to set a username and password for Ubuntu.\n\n   You can SSH into Ubuntu by running `ubuntu` from PowerShell. This allows running Linux commands within the distro.\n   A new Ubuntu terminal profile will also be available in Windows Terminal, simplifying access.\n\n   Ubuntu's home directory (`~`) can be accessed from Windows at `\\\\wsl$\\Ubuntu\\home\\{user}`.\n\n   **Important:** Avoid using the Windows filesystem to store projects running in Docker, as it can significantly affect container performance.\n\n3. **Install Docker Desktop:**\n   ```shell\n   winget install -e --id Docker.DockerDesktop\n   ```\n   Enable the WSL2 engine following the instructions [here](https://docs.docker.com/desktop/wsl/#turn-on-docker-desktop-wsl-2).\n\n**From this point onward, all commands must be run from within the Ubuntu WSL Terminal.**\n\n---\n\n## Installing the project\n\nClone the repository:\n```shell\nmkdir -p ~/code \u0026\u0026 cd ~/code\ngit clone https://github.com/elnurvl/tasker.git\ncd tasker\n```\n\n*All subsequent commands should be executed from the project directory (in our case, `~/code/tasker`).*\n\n### Environment Variables\n\n- Add the following variables to the profile if they are missing:\n  ```shell\n  PROFILE=\"${HOME}/.${SHELL##*/}rc\"; grep -Eq 'WWWUSER=|WWWGROUP=' \"$PROFILE\" || echo \"export WWWUSER=$UID WWWGROUP=$(id -g)\" \u003e\u003e \"$PROFILE\" \u0026\u0026 source \"$PROFILE\" \u0026\u0026 env | grep -E 'WWW'\n  ```\n  These variables match the container's user and group IDs with the host for consistent file permissions.\n\n\n- Copy `.env.example` to `.env`:\n  ```shell\n  cp .env.example .env\n  ```\n\n- Create a Docker network for communication between the projects:\n  ```shell\n  docker network create tasker\n  ```\n\n### Installing the dependencies\n\n1. Install the packages\n    ```shell\n    docker run --rm --interactive --tty --volume $PWD:/app composer --ignore-platform-reqs install\n    ```\n2. Create and start containers:\n    ```shell\n    docker compose up -d\n    ```\n3. Link local storage:\n    ```shell\n    docker compose exec -u sail laravel.test php artisan storage:link\n    ```\n4. Run the migrations and seed the database:\n    ```shell\n    docker compose exec -u sail laravel.test php artisan migrate:fresh --seed\n    ```\n\n### Configuring the site\nTo access the API server locally, you need to add an entry for `APP_DOMAIN` in the **hosts** file\nand generate TLS certificates signed with a system-trusted CA (for HTTPS).\nBoth of these can be achieved by running the below script and require elevated privileges.\n\n```shell\nchmod +x configure_site\n./configure_site\ndocker compose up -d --force-recreate\n```\n\nAfter completing the above steps the API server should be available at the configured `APP_DOMAIN`.\n\n_Note: To use a different domain, change `APP_DOMAIN` in `.env` before running the above command._\n\n---\n## Keycloak\n\nKeycloak is an open-source Identity and Access Management (IAM) solution,\nresponsible for issuing authorization tokens defined by OpenID Connect protocol.\n\nYou can access the Keycloak admin console at `https://tasker.test/auth` endpoint with the following credentials:\n\n```\nusername: admin\npassword: password\n```\n\n### Seeding\nThe realm managing users and authorization tokens for the API application is `sso`.\nThe project already defines a minimal realm configuration out of the box. Password for all users is `password`.\n\nTo reset to the default configuration delete `sso` realm in the admin console and restart `keycloak` service:\n```shell\ndocker compose restart keycloak\n```\n_Note: Default realm configuration can be found at `database/seeders/keycloak`._\n\n### Debugging\nLog files can be found at `storage/logs/keycloak`.\n\n## Mailpit\n\nMailpit is a mail testing tool for developers. It catches all outgoing emails and allows you to view them in a web interface.\nYou can access the Mailpit web interface at `https://tasker.test/mail`.\n\n## Horizon\n\nHorizon is a queue management system for Laravel applications.\nThis project uses queues to index tasks in the background for full text search functionality.\nYou can access the dashboard at `https://tasker.test/horizon`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felnurvl%2Ftasker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felnurvl%2Ftasker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felnurvl%2Ftasker/lists"}