|
1 | | -# Ngportfolio |
| 1 | +# Alexey Popov — Portfolio |
2 | 2 |
|
3 | | -This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 22.0.3. |
| 3 | +**Tech Lead / Senior Angular Developer (NgRx)** · 14+ years · Web (SSR) · Smart TV · Mobile (Ionic) · Desktop (Tauri/Rust) |
4 | 4 |
|
5 | | -## Development server |
| 5 | +🌐 **Live:** https://asdalexey.github.io/ · 🇬🇧 [/en/](https://asdalexey.github.io/en/) · 🇷🇺 [/ru/](https://asdalexey.github.io/ru/) |
6 | 6 |
|
7 | | -To start a local development server, run: |
| 7 | +This repository is my personal portfolio — and the site itself is the demo: a production-grade **Angular 22** |
| 8 | +application, fully bilingual, prerendered for SEO, and covered by tests at 100%. |
8 | 9 |
|
9 | | -```bash |
10 | | -ng serve |
11 | | -``` |
| 10 | +--- |
12 | 11 |
|
13 | | -Once the server is running, open your browser and navigate to `http://localhost:4200/`. The application will automatically reload whenever you modify any of the source files. |
| 12 | +## Highlights |
14 | 13 |
|
15 | | -## Code scaffolding |
| 14 | +- **Angular 22** — standalone components, **zoneless** change detection, signals, `inject()`, strict TypeScript, OnPush everywhere. |
| 15 | +- **Bilingual (EN / RU)** — `@angular/localize` with prerendered `/en/` and `/ru/` builds, language switcher, browser-language redirect. |
| 16 | +- **SEO-first** — static prerendering (SSG), per-locale meta/Open Graph/Twitter, `hreflang` + canonical, JSON-LD (`Person` / `WebSite` / `ProfilePage`), `sitemap.xml`, `robots.txt`, OG image. |
| 17 | +- **100% test coverage** — Vitest + my own [`vitest-auto-spy`](https://www.npmjs.com/package/vitest-auto-spy) library (dogfooded). |
| 18 | +- **Lighthouse** — Accessibility, Best Practices and SEO at **100**; performance tuned with self-hosted fonts, inlined critical CSS and zero render-blocking third-party requests. |
| 19 | +- **Quality gates** — ESLint (+ custom local rules), Prettier, Stylelint, Husky hooks, madge (circular deps), jscpd. |
| 20 | +- **CI/CD** — GitHub Actions builds both locales and deploys to GitHub Pages. |
16 | 21 |
|
17 | | -Angular CLI includes powerful code scaffolding tools. To generate a new component, run: |
| 22 | +## Tech stack |
18 | 23 |
|
19 | | -```bash |
20 | | -ng generate component component-name |
21 | | -``` |
| 24 | +`Angular 22` · `TypeScript` · `RxJS` · `SCSS` · `@angular/localize` · `Vitest` · `vitest-auto-spy` · |
| 25 | +`ESLint` · `Prettier` · `Stylelint` · `GitHub Actions` · `Bun` |
22 | 26 |
|
23 | | -For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run: |
| 27 | +## Local development |
24 | 28 |
|
25 | 29 | ```bash |
26 | | -ng generate --help |
| 30 | +bun install |
| 31 | +bun run start # http://localhost:4200/ (source locale, EN) |
| 32 | +bun run start:ru # Russian locale |
27 | 33 | ``` |
28 | 34 |
|
29 | | -## Building |
30 | | - |
31 | | -To build the project run: |
| 35 | +## Common scripts |
32 | 36 |
|
33 | 37 | ```bash |
34 | | -ng build |
| 38 | +bun run build # production build, both locales, prerendered |
| 39 | +bun run assemble # add redirect / sitemap / robots / og-image to dist |
| 40 | +bun run test:coverage # Vitest with 100% coverage gate |
| 41 | +bun run check:code-quality # prettier + eslint + stylelint |
| 42 | +bun run madge # circular-dependency check |
35 | 43 | ``` |
36 | 44 |
|
37 | | -This will compile your project and store the build artifacts in the `dist/` directory. By default, the production build optimizes your application for performance and speed. |
38 | | - |
39 | | -## Running unit tests |
40 | | - |
41 | | -To execute unit tests with the [Vitest](https://vitest.dev/) test runner, use the following command: |
| 45 | +## Project structure |
42 | 46 |
|
43 | | -```bash |
44 | | -ng test |
45 | 47 | ``` |
46 | | - |
47 | | -## Running end-to-end tests |
48 | | - |
49 | | -For end-to-end (e2e) testing, run: |
50 | | - |
51 | | -```bash |
52 | | -ng e2e |
| 48 | +src/app/ |
| 49 | +├── core/ # models + framework services (SEO, structured data, locale) |
| 50 | +├── features/portfolio/ |
| 51 | +│ ├── sections/ # hero · about · experience · projects |
| 52 | +│ └── portfolio.component |
| 53 | +└── shared/ |
| 54 | + ├── components/ # nav · footer · language-switcher · cards · icon |
| 55 | + └── data/ # locale-independent content |
| 56 | +src/locale/ # messages.ru.xlf |
| 57 | +seo/ # robots.txt · sitemap.xml · root redirect |
53 | 58 | ``` |
54 | 59 |
|
55 | | -Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs. |
| 60 | +## Deployment |
| 61 | + |
| 62 | +Pushing to `main` triggers [`.github/workflows/deploy.yml`](.github/workflows/deploy.yml): it builds the |
| 63 | +EN + RU locales, assembles the site root, and publishes to GitHub Pages (source: GitHub Actions). |
56 | 64 |
|
57 | | -## Additional Resources |
| 65 | +## Contact |
58 | 66 |
|
59 | | -For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. |
| 67 | +- **GitHub:** [@ASDAlexey](https://github.com/ASDAlexey) |
| 68 | +- **LinkedIn:** [alexey-popov](https://www.linkedin.com/in/alexey-popov-7988a874/) |
| 69 | +- **Email:** ASDAlexey@yandex.ru |
| 70 | +- **Location:** Taganrog, Russia · UTC+3 · remote-first |
0 commit comments