{"id":30430492,"url":"https://github.com/sakuexe/portfolio_dotnet","last_synced_at":"2026-03-07T09:31:19.753Z","repository":{"id":233555542,"uuid":"786694612","full_name":"sakuexe/portfolio_dotnet","owner":"sakuexe","description":"Fullstack portfolio website made as part of the HAMK Fullstack Web Development course. (has been migrated to use headless umbraco)","archived":false,"fork":false,"pushed_at":"2025-09-01T15:26:14.000Z","size":55674,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-26T02:42:11.048Z","etag":null,"topics":["cms","csharp","dotnet","mongodb","mvc"],"latest_commit_sha":null,"homepage":"https://sakukarttunen.com","language":"C#","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/sakuexe.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-04-15T06:05:13.000Z","updated_at":"2025-09-16T04:23:31.000Z","dependencies_parsed_at":"2025-10-26T02:37:23.434Z","dependency_job_id":"8091d01b-b257-45f6-8fca-6a9a4dceabc7","html_url":"https://github.com/sakuexe/portfolio_dotnet","commit_stats":null,"previous_names":["sakuexe/fullstack-portfolio","sakuexe/portfolio"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sakuexe/portfolio_dotnet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakuexe%2Fportfolio_dotnet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakuexe%2Fportfolio_dotnet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakuexe%2Fportfolio_dotnet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakuexe%2Fportfolio_dotnet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sakuexe","download_url":"https://codeload.github.com/sakuexe/portfolio_dotnet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakuexe%2Fportfolio_dotnet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30210829,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T09:02:10.694Z","status":"ssl_error","status_checked_at":"2026-03-07T09:02:08.429Z","response_time":53,"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":["cms","csharp","dotnet","mongodb","mvc"],"created_at":"2025-08-22T18:22:31.291Z","updated_at":"2026-03-07T09:31:19.641Z","avatar_url":"https://github.com/sakuexe.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fullstack Portfolio Website\n\n## Technologies\n\n- ASP.NET Core | [ASP.NET Core - Microsoft](https://dotnet.microsoft.com/en-us/apps/aspnet)\n- MongoDB | [MongoDB: The Developer Data Platform](https://www.mongodb.com/)\n- xUnit | [Unit testing C# in .NET using dotnet test and xUnit - Microsoft](https://learn.microsoft.com/en-us/dotnet/core/testing/unit-testing-with-dotnet-test)\n- Docker \u0026 Docker Compose | [Docker Docs - Docker](https://docs.docker.com/)\n- Traefik | [Traefik, The Cloud Native Application Proxy - Traefik Labs](https://traefik.io/traefik/)\n- Watchtower | [Watchtower - containrrr.dev](https://containrrr.dev/watchtower/)\n\n## Running the project in development\n\n1. Clone the repository\n```bash\ngit clone https://github.com/sakuexe/portfolio.git\ncd portfolio\n```\n\n2. Install the dependencies\n\n**OPTIONAL**: You can make this easier using the provided nix flake. it has a \ndevelopment shell for this project that you can use with the following command.\n\n```bash\nnix flake develop\n```\n\nThen install the packages needed\n\n```bash\ndotnet restore\nnpm ci\n```\n\n3. Use the dev-composer.yml to run mongodb\n\n```bash\ndocker compose -f dev-composer.yml up -d\n```\n\n4. Add a `appsettings.Development.json` file\n\nThe file should include the following information. You can change the values\nto your liking. But do not modify the keys.\n\n```json\n{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  },\n  \"ConnectionStrings\": {\n    \"DefaultConnection\": \"localhost\",\n    \"DatabaseName\": \"portfolio\"\n  },\n  \"Admin\": {\n    \"Username\": \"root\",\n    \"Password\": \"rootroot\"\n  },\n  \"Email\": {\n    \"Address\": \"from@email.com\",\n    \"Password\": \"aaaa bbbb cccc dddd\",\n    \"Recipient\": \"to@email.com\"\n  }\n}\n```\n\n5. Run the project\n```bash\ndotnet run\n```\n\n6. For Development, run the project in watch mode\n```bash\n# run the project in watch mode\nnpm run dev \u0026 dotnet watch\n```\n\n## Deployment\n\n1. Clone the project\n```bash\ngit clone https://github.com/sakuexe/portfolio.git\n```\n\n2. Use the `example.env` file to add a `.env` file to the root of the project\n\n```bash\ncd portfolio\nmv ./example.env.txt ./.env\n# edit the contents to your needs\nvi .env\n# or if you're a weirdo\nnano .env\n```\n\n3. Install docker\n\nGuide for Ubuntu:\n[Install Docker Engine on Ubuntu](https://docs.docker.com/engine/install/ubuntu/)\n\n5. Update the docker-compose to include your domain name, instead of mine\n```bash\n# replace myepicwebsite.net with your domain\necho \"myepicwebsite.net\" | xargs -I {} sed -i 's/sakukarttunen.com/{}/g' docker-compose.yml\n```\n\n5. Run docker compose\n\nThis will build the images and run the containers in the background\n```bash\ndocker compose up --build -d\n# check that all went well\ndocker logs portfolio-1\n```\n\n6. Visit your domain\n\nIt should now have SSL certificates and include base data in the database.\nThe initial build will take a while, when traefik has to get the certificates from Let's Encrypt.\n\n## Other commands\n\n- Check the size of the docker image\n\n```bash\ndocker manifest inspect -v ghcr.io/sakuexe/portfolio:prod | grep size | awk -F ':' '{sum+=$NF} END {print sum}' | numfmt --to=iec-i\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsakuexe%2Fportfolio_dotnet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsakuexe%2Fportfolio_dotnet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsakuexe%2Fportfolio_dotnet/lists"}