Shagon1k / AHurynovich-CV

Aliaksei's curriculum vitae
MIT License
3 stars 0 forks source link

AH Curriculum Vitae project

react boilerplate
based on my React Universal 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:

Build:

Deploy:

Clean up:

Test:

Lint:

Code vulnerabilities scan:

Components Library maintaining:

⬆️ 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