Skip to content

Shagon1k/AHurynovich-CV

Repository files navigation

AH Curriculum Vitae project

react boilerplate


My personal CV Web Application written on TypeScript.

Generally Application follows Static CSR approach deploying final build to AWS S3. Than it is hosted using AWS S3 Static Web Hosting + CloudFront + Route 53.

CircleCI codecov Known Vulnerabilities GitHub MIT License

InsightsSnapshot

OpenVSCode

  1. Technology Stack
  2. Run tasks
  3. Project structure
  4. Additional documentation
  5. UI Components Library
  6. Issues
  7. License

Technology stack

Project Bundling

Webpack Babel SASS-LoaderPostCSS-LoaderAutoprefixer

πŸ’‘ Note (TypeScript tranpiling using Babel) Transpiling TypeScript using Babel (with Webpack 'babel-loader', NOT 'ts-loader') was chosen: 1) faster compilation (no types check); 2) having single source of compilation - Babel.

On the other hand, using Babel compilation results in completely lose of type safety and TypeScript checks during this phase. That's why additional test script (tsc) were presented to check as pre-commit(push) hook + in scope of CI/CD.

Application

TypeScript React React-Router ReduxRedux-Saga SCSSCSS-Modules I18n-Next React-Helmet Mobile-Detect

Code Styling

ESLint StyleLint Prettier

Testing

Unit/Integration Testing

Jest RTL Jest-Axe

E2E Testing

Cypress Cypress-Testing-Library Cypress-Axe

Performance testing

LightHouse-CI

πŸ’‘ Note (Performance Testing usage) Performance Testing is only set up on CI/CD pipeline level. For manual performance testing you can use Chrome built-in Lighthouse DevTool.

Tests Reports

CodeCov CircleCI-Test-InsightsJest-JUnit

Other

CircleCI AWS-CLI Husky SiteMapRobots Snyk StoryBook

⬆️ back to top

Run tasks

πŸ’‘ Note: Default development Client host port: 1337

Start:

  • npm start (npm run build:and:start:dev) - Application development build task -> start with Webpack Watcher (port 1337)
  • npm run build:and:start:prod - Application production build task -> start hosting (using http-server)

Build:

  • npm run build - Application general build task (development is default)
  • npm run build:dev - Application development build task
  • npm run build:prod - Application production build task
  • npm run build:prod:pwa - Application production build task (with PWA support)

Deploy:

  • npm run deploy:s3 - Application deploy to AWS S3 task (used for Static Site Hosting)
  • npm run build:and:deploy:s3 - Application production build -> deploy to AWS S3 task (used for Static Site Hosting)

Clean up:

  • npm run build:clean - Clean build ("dist") folder

Test:

  • Unit/Integration Testing
    • npm test (npm run test) - run Application Unit/Integration Tests (Common + A11y)
    • npm run test:with:reports - run Application Unit/Integration Tests (Common + A11y). Reports (results and coverage) enabled.
    • npm run test:ci - run Application Unit/Integration Tests in CI mode (used for CI/CD pipeline level testing)
    • npm run test:ci:with:reports - run Application Unit/Integration Tests in CI mode (used for CI/CD pipeline level testing). Reports (results and coverage) enabled.
  • E2E Testing
    • npm run test:e2e (npm run test:e2e:dev) - run All (Common + A11y) E2E Tests (development build used)
    • npm run test:e2e:dev:open - open launcher of All (Common + A11y) E2E Tests (development build used)
    • npm run test:e2e:common:prod - run Common E2E Tests (production build used)
    • npm run test:e2e:a11y:prod - run A11y E2E Tests (production build used)
  • Performance Testing
    • npm run test:perf:ci - run Application Performance + Insights testing (Lighthouse CI, used for CI/CD pipeline level testing)
  • TypeScript Types checking
    • npm run test:tsc - run Application Typescript's types checking (no Libraries level checking)

Lint:

  • npm run lint:scripts - lint JS/TS files
  • npm run lint:scripts:fix - lint JS/TS files with autofix
  • npm run lint:styles - lint Styles files
  • npm run lint:styles:fix - lint Styles files with autofix
  • npm run lint - lint all (JS/TS+Styles) files
  • npm run lint:fix - lint all (JS/TS+Styles) files with autofix

Code vulnerabilities scan:

  • npm run sca:test - scan for vulnerabilities for known issues (with disrupting processes) - CI/CD integration.
  • npm run sca:test:dev - scan for vulnerabilities for known issues (with disrupting processes), include dev dependencies
  • npm run sca:monitor - scan for vulnerabilities with exposing and storing results snapshot (without disrupting processes)
  • npm run sca:auth - SCA tool (Snyk) authenticate (auth token required)

Components Library maintaining:

  • npm run storybook:start - start Components Library application (localy)
  • npm run storybook:build - build Components Library (dist folder: 'storybook-static')
  • npm run storybook:build:clean - clean Components Library build
  • npm run storybook:deploy:s3 - Components Library deploy to AWS S3 task for (used for Static Site Hosting)
  • npm run storybook:build:and:deploy:s3 - Components Library build -> deploy to AWS S3 task (used for Static Site Hosting)

⬆️ back to top

Project structure

./
β”‚
β”œβ”€β”€β”€.circleci   // application CI/CD configuration (using CircleCI)
β”‚
β”œβ”€β”€β”€.github   // GitHub templates for Projects
β”‚
β”œβ”€β”€β”€.husky   // Git Hooks configuration
β”‚
β”œβ”€β”€β”€.vscode   // VSCode Workspace configuration (additionally for .editorconfig)
β”‚
β”œβ”€β”€β”€config   // configurations folder
β”‚   β”‚
β”‚   β”œβ”€β”€β”€application
β”‚   β”‚
β”‚   β”œβ”€β”€β”€environment
β”‚   β”‚
β”‚   β”œβ”€β”€β”€test
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€jest   // Unit/Integration Tests configuration folder
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€β”€mocks   // Jest setup mocks (e.g. no-JS pattern files mock)
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€β”€test-utils   // Testing utils enhancement (e.g. RTL custom "render" util)
β”‚   β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€β”€custom
β”‚   β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”‚   β”‚   test-utils.js
β”‚   β”‚   β”‚   β”‚   β”‚   index.js
β”‚   β”‚   β”‚   β”‚   └───
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”‚   jest.setupAfterEnv.js   // Jest pre-setup execution (after installed to environment)
β”‚   β”‚   β”‚   β”‚   jest.setup.js   // Jest pre-setup execution (before installed to environment)
β”‚   β”‚   β”‚   └───
β”‚   β”‚   β”œβ”€β”€β”€cypress   // E2E Tests configuration folder
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€β”€downloads
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€β”€e2e
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€β”€fixtures
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€β”€support
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”‚   cypress.config.a11y.json   // E2E A11y Tests override configuration
β”‚   β”‚   β”‚   β”‚   cypress.config.e2e.json   // E2E General Tests override configuration
β”‚   β”‚   β”‚   └───
β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   cypress.config.js   // E2E Tests (Cypress) main config file
β”‚   β”‚   β”‚   jest.config.js   // Unit/Integration Tests (Jest) main config file
β”‚   β”‚   β”‚   lighthouse.config.js   // Performance Tests main config file (used for CI/CD pipeline)
β”‚   β”‚   └───
β”‚   β”‚
β”‚   β”œβ”€β”€β”€lint
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€eslint
β”‚   β”‚   β”‚
β”‚   β”‚   └───stylelint
β”‚   β”‚
β”‚   β”œβ”€β”€β”€prettier
β”‚   β”‚
β”‚   β”œβ”€β”€β”€webpack
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€app   // Webpack Application configuration
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€helpers
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€β”€loaders   // Webpack loaders (babel-loader, sass-loader, etc.)
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€β”€plugins   // Webpack plugins (Favicon plugin, HTML plugin, etc.)
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   └───resolve   // Webpack resolves (aliases, etc.)
β”‚   β”‚   β”‚
β”‚   β”‚   └───storybook   // Webpack Components Library (StoryBook) configuration
β”‚   β”‚
β”‚   β”œβ”€β”€β”€storybook   // UI Components Library configuration
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€docs
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€helpers
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   β”œβ”€β”€β”€argTypes   // StoryBook global argTypes and args (e.g. device type)
β”‚   β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   └───decorators   // StoryBook global decorators (e.g. Providers wrapper)
β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   constants.js   // StoryBook sharable constants
β”‚   β”‚   β”‚   main.js   // StoryBook main config file
β”‚   β”‚   β”‚   preview.js   // StoryBook global stories setup (decorators, parameters, args, etc.)
β”‚   β”‚   β”‚   webpack.config.storybook.es5.js   // StoryBook Webpack config loader (use Babel transpiler to provide ES6 Webpack config usage)
β”‚   β”‚   └───
β”‚   β”‚
β”‚   β”œβ”€β”€β”€robots
β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   robots.txt   // Robots configuration to enhance Web crawlers search
β”‚   β”‚   β”‚   sitemap.xml   // SiteMap configuration
β”‚   β”‚   └───
β”‚   β”‚
β”‚   β”‚   README.md   // Config folder info
β”‚   └───
β”‚
β”œβ”€β”€β”€src
β”‚   β”‚
β”‚   β”œβ”€β”€β”€api
β”‚   β”‚
β”‚   β”œβ”€β”€β”€services    // device detection, i18n, etc.
β”‚   β”‚
β”‚   β”œβ”€β”€β”€utils   // reusable utils
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€functions
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€objects
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€strings
β”‚   β”‚   β”‚
β”‚   β”‚   └───user
β”‚   β”‚
β”‚   β”œβ”€β”€β”€assets
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€fonts
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€images
β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   preload.config.js
β”‚   β”‚   └───
β”‚   β”‚
β”‚   β”œβ”€β”€β”€components   // React components folder
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€base   // base components (Button, Icon, etc.)
|   |   |
|   |   β”œβ”€β”€β”€common   //common components (Header, Footer, etc.)
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€pages   // general pages components (MainPage, etc.)
β”‚   β”‚   β”‚
β”‚   β”‚   └───routes   // application routes setup
β”‚   β”‚
β”‚   β”œβ”€β”€β”€reusables
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€custom-hooks
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€hocs
β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   services.context.tsx   // Services context for components injection using specific Custom Hook/HOC
|   |   |   skip-to-content.context.tsx   // Skip To Content (A11y enhancement) context for components injection using specific Custom Hook/HOC
β”‚   β”‚   └───
β”‚   β”‚
β”‚   β”œβ”€β”€β”€store   // Redux's Store
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€middlewares
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€slices
β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   store.ts   // main Store setup file
β”‚   β”‚   β”‚   store.reducer.ts   // main reducer setup file
β”‚   β”‚   β”‚   store.saga.ts   // root saga setup file (main init + watch sagas)
β”‚   β”‚   β”‚   store.types.ts   // general Store types
β”‚   β”‚   └───
β”‚   β”‚
β”‚   β”œβ”€β”€β”€styles   // main styles folder
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€base   // base styles (mixins, functions, variables, etc.)
β”‚   β”‚   β”‚
β”‚   β”‚   β”‚   main.scss   // main styles file
β”‚   β”‚   β”‚   font-declarations.scss  // fonts declarations main file
β”‚   β”‚   β”‚   reset-normalize.scss   // reset & normalize basic styles
β”‚   β”‚   β”‚   scrollbar.scss   // scrollbar styles
β”‚   β”‚   └───
β”‚   β”‚
β”‚   β”‚   Application.component.tsx   // main application Component
β”‚   β”‚   Application.module.scss   // entry styles file
β”‚   β”‚   application.tsx   // main Create App file
β”‚   β”‚   application.types.ts   // application types models file
β”‚   β”‚   declarations.d.ts   // non-TS files declarations and globals
β”‚   β”‚   index.ts   // main entry file
|   |   index.html   // source HTML file
β”‚   β”‚   README.md   // Source folder info
β”‚   └───
β”‚
β”œβ”€β”€β”€dist
β”‚   β”‚
β”‚   β”œβ”€β”€β”€assets
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€favicons   // favicons collection folder (generated by Webpack Favicon plugin)
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€β”€fonts
β”‚   β”‚   β”‚
β”‚   β”‚   └───images
β”‚   β”‚
β”‚   β”œβ”€β”€β”€css
β”‚   β”‚
β”‚   β”œβ”€β”€β”€js
β”‚   β”‚
β”‚   β”‚   robots.txt
β”‚   β”‚   sitemap.xml
β”‚   β”‚   index.html   // result HTML file
β”‚   └───
β”œβ”€β”€β”€
β”‚
β”‚   .editorconfig   // editor basic setup for IDE
β”‚   babel.config.js   // Babel configuration
β”‚   commitlint.config.ts   // Commit linting configuration
β”‚   jsconfig.json   // JS configuration file for indicating directory root, aliases setup, etc.
β”‚   tsconfig.json   // TS configuration file for indicating basic setup, including directory root, aliases setup, etc.
β”‚   package.json
β”‚   package-lock.json
β”‚   .gitignore
β”‚   LICENSE
β”‚   README.md
└───

⬆️ back to top

Additional documentation

Folders README

Name Description
Config README general configuration setup
Source README major source of truth for Source folder

Project Docs

Name Description
Branching Strategy & CI/CD Project's branching strategy info and CI/CD approach description
TypeScript Project's TypeScript usage details and general Code Convention
PWA Project's PWA support information (tech stack, build process, etc.)
Testing Project's testing approaches (Unit+Integration, E2E) + according CI/CD quality gates description
Typography Project's typography configuration and conventions

UI Components Library

Project's UI components library, created with StoryBook, could be found here

Issues

Find a bug or enhancement and want provide help? Please submit an issue.

License

MIT Aliaksei's Curriculum Vitae project

⬆️ back to top