{"id":17123373,"url":"https://github.com/omke/portfolio","last_synced_at":"2025-07-02T22:33:10.148Z","repository":{"id":54961383,"uuid":"310155673","full_name":"OMKE/Portfolio","owner":"OMKE","description":"Portfolio - Laravel 8 and Angular 11 (ngrx)","archived":false,"fork":false,"pushed_at":"2024-01-28T12:56:31.000Z","size":1320,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T03:13:17.960Z","etag":null,"topics":["angular","api","backend","crud","devops","docker","docker-compose","example","example-project","frontend","full-stack","javascript","laravel","mysql","ngrx","php","portfolio","production-ready","redux","state-management"],"latest_commit_sha":null,"homepage":"https://omaririskic.com/","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/OMKE.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":"2020-11-05T01:08:58.000Z","updated_at":"2022-01-18T16:03:52.000Z","dependencies_parsed_at":"2024-12-01T07:50:54.847Z","dependency_job_id":null,"html_url":"https://github.com/OMKE/Portfolio","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/OMKE/Portfolio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OMKE%2FPortfolio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OMKE%2FPortfolio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OMKE%2FPortfolio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OMKE%2FPortfolio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OMKE","download_url":"https://codeload.github.com/OMKE/Portfolio/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OMKE%2FPortfolio/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263226636,"owners_count":23433749,"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","api","backend","crud","devops","docker","docker-compose","example","example-project","frontend","full-stack","javascript","laravel","mysql","ngrx","php","portfolio","production-ready","redux","state-management"],"created_at":"2024-10-14T18:25:35.559Z","updated_at":"2025-07-02T22:33:10.084Z","avatar_url":"https://github.com/OMKE.png","language":"PHP","readme":"\u003ch1 align=\"center\"\u003eomaririskic.com - Portfolio\u003c/h1\u003e\n\n## How to run\n\n### Docker 🐬\n```$ docker-compose build \u0026\u0026 docker-compose up -d```  \n\nThere are four containers:\n- nginx\n- php\n- queue\n- mysql  \n- angular\n\n\n#### PHP\n1. Navigate to `backend` folder and run ```$ cp .env.example .env```\n2. Navigate back to the project root and generate APP_KEY with:   \n```$ docker-compose exec php php artisan key:generate```\n3. Link storage path with:  \n```$ docker-compose exec php php artisan storage:link```\n4. Run migrations and seed the database with:  \n```$ docker-compose exec php php artisan migrate:fresh --seed```  \n5. Generate JWT secret with:  \n```$ docker-compose exec php php artisan jwt:secret```\n\nAccess an api on http://localhost:8088/api/v1  \n\nRun tests with:   \n```$ docker-compose exec php php artisan test --filter \u003ctestSuiteName \\ methodName\u003e```\n\n#### Angular\nAccess frontend app on http://localhost:4200\n\n##### SSR\nNavigate to `frontend` folder and run with `npm run dev:ssr`.  \nAccess ssr frontend app on http://localhost:4201\n\n##### SSG\nNavigate to `frontend` folder and run with `npm run prerender`. Pre-rendered pages will be in the `dist` folder.  \n**Note**  \nSSG uses custom script - `frontend/prerender/routes.ts` to get dynamic routes for pre-rendering, in this case it fetches all the projects from the api,  \nextracts all of the ids and saves them to the prerender/routes-result.txt file  \nWe can add as many dynamic routes as we want, we just need to add new entry to `routes` set. 'url' key stands for API URL and 'name' is the route name in our frontend app.\n\n### Without Docker\n1. Navigate to `backend` folder\n2. Run ```$ cp .env.example .env```\n3. Change the data in .env file accordingly (mysql connection) \n4. Generate APP_KEY with:  \n```$ php artisan key:generate```\n5. Generate JWT_SECRET with: \n```$ php artisan jwt:secret```\n6. Migrate the database and seed with data:  \n```$ php artisan migrate:fresh --seed```  \n7. Make a symlink to storage path:  \n```$ php artisan storage:link```\n8. Start the server:  \n```$ php artisan serve```\n9. Navigate to `frontend` folder and run `npm i \u0026\u0026 npm start`  \n10. Access frontend app on http://localhost:4200  \n\n**Note**  \nFor SSR and SSG see instructions above  \n\n**Note**  \nIn order to send an email when a new message is created, you need to run queue worker.  \nFor development run: `$ php artisan queue:work` in another terminal window  \nFor production, Laravel recommends\n[Supervisor](https://laravel.com/docs/8.x/queues#supervisor-configuration)    \n \n\n#### Useful bash/zsh functions and aliases: \n\nartisan - function - shorthand for 'docker-compose exec php php artisan' or  \nwhen current folder doesn't have docker-compose.yml file, it will just run php artisan with provided arguments  \n```$xslt\n    function artisan(){\n        if test -f \"docker-compose.yml\"; then\n            docker-compose exec php php artisan \"$@\"\n        else\n            php artisan \"$@\"\n        fi\n    }\n```\nPHPUnit with filter  \n``alias pf=\"clear \u0026\u0026 phpunit --filter\"``\n  \nartisan test with filter  \n``alias at=\"clear \u0026\u0026 artisan test --filter\"``\n\n\n## Documentation 📚\n\n[omaririskic.com - API](https://documenter.getpostman.com/view/6089658/TVYQ3Ere#64651b17-3546-4d25-bc15-4136e47bc814)","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomke%2Fportfolio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fomke%2Fportfolio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomke%2Fportfolio/lists"}