{"id":21023531,"url":"https://github.com/jahidulpabelislam/portfolio-api","last_synced_at":"2026-05-07T10:34:57.341Z","repository":{"id":45109321,"uuid":"147735161","full_name":"jahidulpabelislam/portfolio-api","owner":"jahidulpabelislam","description":"Bespoke API for managing projects for my portfolio.","archived":false,"fork":false,"pushed_at":"2024-09-12T22:29:32.000Z","size":782,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-20T13:41:15.036Z","etag":null,"topics":["api","cms","crud","database","headless-cms","mysql","orm","php","portfolio"],"latest_commit_sha":null,"homepage":"https://api.jahidulpabelislam.com/v4/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jahidulpabelislam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2018-09-06T21:21:56.000Z","updated_at":"2024-09-12T22:29:34.000Z","dependencies_parsed_at":"2023-09-27T07:32:56.056Z","dependency_job_id":"3b7a81c3-ea00-49a2-bfa3-fecaf84ab6aa","html_url":"https://github.com/jahidulpabelislam/portfolio-api","commit_stats":null,"previous_names":[],"tags_count":93,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jahidulpabelislam%2Fportfolio-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jahidulpabelislam%2Fportfolio-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jahidulpabelislam%2Fportfolio-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jahidulpabelislam%2Fportfolio-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jahidulpabelislam","download_url":"https://codeload.github.com/jahidulpabelislam/portfolio-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243456563,"owners_count":20293905,"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":["api","cms","crud","database","headless-cms","mysql","orm","php","portfolio"],"created_at":"2024-11-19T11:18:31.755Z","updated_at":"2026-05-07T10:34:57.334Z","avatar_url":"https://github.com/jahidulpabelislam.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Portfolio API\n\nAPI to manage the projects and their images displayed in my [portfolio](https://jahidulpabelislam.com/). It provides CRUD functionality for the [CMS](https://github.com/jahidulpabelislam/portfolio-cms/) as well as the central source for the projects shown on the actual [portfolio](https://github.com/jahidulpabelislam/portfolio/).\n\n## Why\n\nI wanted a system to quickly and easily manage the projects without having to make code changes which lead to the creation of a CMS. I therefore needed a single source of information for both the CMS and portfolio which is this.\n\nThe first two versions were developed within the portfolio. However, from v3, I separated the API (and CMS) from the portfolio for improved maintainability and readability.\n\n## Requirements\n\n- Git\n- PHP 8.0+\n- PHP PDO\n- Composer\n- MySQL 5+\n- Apache\n\n## Setup\n\n1. Clone repo with `git@github.com:jahidulpabelislam/portfolio-api.git`.\n\n2. Navigate to project folder and run `composer install`.\n\n3. Create new database.\n\n4. A MySQL user with select, insert, update \u0026 delete capabilities on the new database.\n\n5. Import `/set-up/base-structure.sql` into the newly created database.\n\n6. Run migrations from `/migrations/*` (if any) into MySQL in the order of the number at the start of the filenames.\n\n7. Copy and fill in example files (in any order).\n\n    - Copy `/set-up/Manager-sample.php` and move to `/src/Auth/Manager.php` then update all 3 functions with your auth functionality.\n\n## API\n\n### Endpoints\n\n#### Resources\n\n| URI                                                                                                    |                 Description                 |  `GET`   |  `POST`  |  `PUT`   | `DELETE` |\n|--------------------------------------------------------------------------------------------------------|:-------------------------------------------:|:--------:|:--------:|:--------:|:--------:|\n| [/projects/](https://api.jahidulpabelislam.com/projects/)                                              |                All projects                 | \u0026#10004; | \u0026#10004; | \u0026#10006; | \u0026#10006; |\n| [/projects/{projectId}/](https://api.jahidulpabelislam.com/projects/13/)                            |              A single project               | \u0026#10004; | \u0026#10006; | \u0026#10004; | \u0026#10004; |\n| [/projects/{projectId}/images/](https://api.jahidulpabelislam.com/projects/13/images/)              |     Images attached to a single project     | \u0026#10004; | \u0026#10004; | \u0026#10006; | \u0026#10006; |\n| [/projects/{projectId}/images/{imageId}/](https://api.jahidulpabelislam.com/projects/13/images/72/) | A single image attached to a single project | \u0026#10004; | \u0026#10006; | \u0026#10006; | \u0026#10004; |\n\n#### Auth\n\n| URI                                                                |       Description       |  `GET`   |  `POST`  |  `PUT`   | `DELETE` |\n|--------------------------------------------------------------------|:-----------------------:|:--------:|:--------:|:--------:|:--------:|\n| [/auth/login/](https://api.jahidulpabelislam.com/auth/login/)   |         Log in          | \u0026#10006; | \u0026#10004; | \u0026#10006; | \u0026#10006; |\n| [/auth/logout/](https://api.jahidulpabelislam.com/auth/logout/) |         Log out         | \u0026#10006; | \u0026#10006; | \u0026#10006; | \u0026#10004; |\n| [/auth/status/](https://api.jahidulpabelislam.com/auth/status/) | Get current auth status | \u0026#10004; | \u0026#10006; | \u0026#10006; | \u0026#10006; |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjahidulpabelislam%2Fportfolio-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjahidulpabelislam%2Fportfolio-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjahidulpabelislam%2Fportfolio-api/lists"}