{"id":31856749,"url":"https://github.com/kosmaster87/portfolio","last_synced_at":"2026-05-15T13:02:50.563Z","repository":{"id":266738851,"uuid":"898678870","full_name":"KosMaster87/Portfolio","owner":"KosMaster87","description":"Built with Angular, I used attention to detail and product mindset to deliver a bilingual, responsive SPA with polished UX and project storytelling.","archived":false,"fork":false,"pushed_at":"2026-04-27T15:11:34.000Z","size":2306,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-27T17:11:53.916Z","etag":null,"topics":["angular","animations","archict","contact-form","developer-portfolio","frontend","responsive-design","typescript"],"latest_commit_sha":null,"homepage":"https://portfolio.dev2k.org/","language":"TypeScript","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/KosMaster87.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-12-04T20:39:34.000Z","updated_at":"2026-04-27T15:13:41.000Z","dependencies_parsed_at":"2024-12-05T21:29:06.371Z","dependency_job_id":"972dbca6-90b3-49d5-96ef-c410dbf1faaf","html_url":"https://github.com/KosMaster87/Portfolio","commit_stats":null,"previous_names":["kosmaster87/portfolio"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/KosMaster87/Portfolio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KosMaster87%2FPortfolio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KosMaster87%2FPortfolio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KosMaster87%2FPortfolio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KosMaster87%2FPortfolio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KosMaster87","download_url":"https://codeload.github.com/KosMaster87/Portfolio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KosMaster87%2FPortfolio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33067476,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["angular","animations","archict","contact-form","developer-portfolio","frontend","responsive-design","typescript"],"created_at":"2025-10-12T14:54:45.603Z","updated_at":"2026-05-15T13:02:50.555Z","avatar_url":"https://github.com/KosMaster87.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 💼 Personal Portfolio – Angular SPA\n\n[![Angular](https://img.shields.io/badge/Angular-21.0-DD0031?style=for-the-badge\u0026logo=angular\u0026logoColor=white)](https://angular.io/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.7-3178C6?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![SCSS](https://img.shields.io/badge/SCSS-CC6699?style=for-the-badge\u0026logo=sass\u0026logoColor=white)](https://sass-lang.com/)\n[![Test Coverage](https://img.shields.io/badge/coverage-96.4%25-brightgreen?style=for-the-badge)](https://portfolio.dev2k.org/coverage/index.html)\n[![Tests](https://img.shields.io/badge/tests-823%20passing-success?style=for-the-badge)](https://portfolio.dev2k.org/coverage/index.html)\n[![License](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)](LICENSE)\n\nA fully responsive, modern portfolio website built as a Single Page Application (SPA) to showcase my skills, projects, and professional experience. Designed with a mobile-first approach and optimized for recruiters and hiring managers.\n\n[🌐 Live Demo](https://portfolio.dev2k.org) | [📊 Coverage Report](https://portfolio.dev2k.org/coverage/index.html) | [📚 API Docs](https://portfolio.dev2k.org/jsdoc/index.html)\n\n---\n\n## 🚀 Live Demo\n\n🔗 **[portfolio.dev2k.org](https://portfolio.dev2k.org)**\n\n---\n\n## 📸 Preview\n\n![Portfolio Screenshot](./src/assets/images/preview-portfolio.png)\n\n---\n\n## ✨ Features\n\n- 🎨 **Light/Dark/Auto Theme** – System preference detection with manual override\n- 🌍 **i18n (EN/DE)** – Multi-language support with seamless switching\n- 📱 **Fully Responsive** – Optimized for mobile, tablet, and desktop\n- ⚡ **PWA with Service Worker** – Offline support and app-like experience\n- ♿ **Accessible (ARIA)** – WCAG compliant with keyboard navigation\n- 🧪 **96.4% Test Coverage** – 823 passing tests with comprehensive coverage\n- 📧 **Contact Form** – Integrated PHP backend with email notifications\n- 🔒 **Security Features** – Rate limiting, XSS protection, CORS configuration\n- 🎯 **SEO Friendly** – Semantic HTML and optimized meta tags\n- 📊 **Project Showcase** – Dynamic project cards with live demos\n\n---\n\n## 🛠️ Tech Stack\n\n**Frontend**\n\n- Angular 21 (Standalone, Signals, Zoneless)\n- TypeScript 5.7\n- SCSS\n- Service Worker (PWA)\n\n**Testing \u0026 Quality**\n\n- Jasmine + Karma (823 tests)\n- 96.4% Code Coverage\n- ESLint \u0026 Prettier\n\n**Backend**\n\n- PHP 8+ (Contact API)\n- Apache with .htaccess\n\n**DevOps**\n\n- GitHub Actions (CI/CD)\n- FTP Deployment to IONOS\n- JSDoc (API Documentation)\n\n---\n\n## 📁 Project Structure\n\n```\nPortfolio/\n├── .github/\n│   └── workflows/                   # CI/CD workflows\n│       └── deploy.yml               # Build, test, and deploy pipeline\n├── public/\n│   ├── api/\n│   │   └── contact/                 # PHP Contact Form API\n│   │       ├── contact.php          # Production endpoint (not in Git)\n│   │       └── contact.example.php  # Template file\n│   ├── fonts/                       # Overpass, Syne\n│   ├── i18n/                        # Translation files (de.json, en.json)\n│   ├── theme-dark/                  # Dark theme PWA icons\n│   ├── theme-light/                 # Light theme PWA icons\n│   └── manifest-*.webmanifest       # PWA manifests\n├── src/\n│   ├── app/\n│   │   ├── core/                    # Core services \u0026 models\n│   │   │   ├── interceptors/        # HTTP interceptors\n│   │   │   ├── models/              # TypeScript interfaces\n│   │   │   ├── services/            # Business logic (8 services)\n│   │   ├── features/                # Feature modules\n│   │   │   ├── home/                # Home page sections\n│   │   │   │   ├── components/      # Hero, About, Skills, Projects, Contact\n│   │   │   │   └── pages/           # HomePage\n│   │   │   ├── legal/               # Legal pages\n│   │   │   │   └── pages/           # Imprint, Privacy, Sources\n│   │   │   ├── projects/            # Project components\n│   │   │   │   └── components/      # ProjectCard\n│   │   ├── layout/                  # App layout\n│   │   │   ├── header/              # Navigation, Theme/Lang switcher\n│   │   │   ├── footer/              # Footer, Social links\n│   │   ├── shared/                  # Reusable components\n│   │   │   ├── components/          # Buttons, UI components\n│   │   │   ├── directives/          # IconHover, NoScroll\n│   │   │   ├── pages/               # NotFoundPage (404)\n│   │   ├── app.ts                   # Root component\n│   │   ├── app.config.ts            # App configuration \u0026 providers\n│   │   ├── app.routes.ts            # Route definitions\n│   │   └── app.spec.ts              # Root component tests\n│   ├── assets/\n│   │   ├── images/                  # Profile, project screenshots\n│   │   └── screenshots/             # App previews\n│   ├── environments/                # Environment configs\n│   ├── styles/                      # Global SCSS\n│   │   ├── components/              # Component-specific styles\n│   │   ├── _fonts.scss\n│   │   ├── _layout.scss\n│   │   ├── _mixins.scss\n│   │   ├── _typography.scss\n│   │   └── _variables.scss\n│   ├── index.html                   # HTML entry point\n│   ├── main.ts                      # Application bootstrap\n│   └── styles.scss                  # Global styles entry\n├── angular.json                     # Angular workspace config\n├── ngsw-config.json                 # Service Worker config\n├── package.json                     # Dependencies \u0026 scripts\n├── tsconfig.json                    # TypeScript config\n├── typedoc.json                     # TypeDoc configuration\n├── docs/                            # Documentation\n│   ├── manual/                      # Handgeschriebene Doku (in Git)\n│   └── generated/                   # Generierter API-Output (gitignored)\n│       ├── typedoc/                 # TypeDoc-Output  (npm run docs:typedoc)\n│       └── jsdoc/                   # JSDoc-Output    (npm run docs:jsdoc)\n└── README.md                        # This file\n```\n\n---\n\n## 📁 Deployment Structure\n\nAfter deployment to **portfolio.dev2k.org**, the following structure is created:\n\n```\nportfolio.dev2k.org/\n├── index.html                       # Portfolio App\n├── assets/                          # Images, fonts, i18n\n├── *.js, *.css                      # Compiled bundles\n├── .htaccess                        # Apache config (routing + security)\n├── coverage/                        # 📊 Test Coverage Report\n│   └── index.html                   # https://portfolio.dev2k.org/coverage/index.html\n└── jsdoc/                           # 📚 API Documentation\n    └── index.html                   # https://portfolio.dev2k.org/jsdoc/index.html\n```\n\n**Live URLs:**\n\n- 🌐 App: [portfolio.dev2k.org](https://portfolio.dev2k.org)\n- 📊 Coverage: [portfolio.dev2k.org/coverage](https://portfolio.dev2k.org/coverage/index.html)\n- 📚 API Docs: [portfolio.dev2k.org/jsdoc](https://portfolio.dev2k.org/jsdoc/index.html)\n\n---\n\n## 📖 Documentation\n\nProject documentation is currently centralized in this README and the live reports:\n\n- [Coverage Report](https://portfolio.dev2k.org/coverage/index.html)\n- [API Docs](https://portfolio.dev2k.org/jsdoc/index.html)\n\n---\n\n## 👤 Author\n\n**Konstantin Aksenov**\n\n- 🌐 Portfolio: [portfolio.dev2k.org](https://portfolio.dev2k.org)\n- 💼 LinkedIn: [LinkedIn](https://www.linkedin.com/in/konstantin-aksenov-802b88190/)\n- 🐙 GitHub: [@KosMaster87](https://github.com/KosMaster87)\n- 📧 Email: konstantin.aksenov@dev2k.org\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkosmaster87%2Fportfolio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkosmaster87%2Fportfolio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkosmaster87%2Fportfolio/lists"}