Structure
Project Structure
vdkctv/
  .storybook/           -> Storybook configuration
  [build]               -> Generated folder containing compiled code
  docker/               -> Folder for automated CI/CD processes
  docs/                 -> Local documentation files, which can be browsed in Github
  generators/           -> Folder for generators templates for starting Elevate projects
  helpers/              -> Helper files i.e: User Mock server, generating prod package.json or starting dev servers
  [node_modules]        -> Generated folder where all NPM dependencies will be downloaded
  platforms/            -> Specific to certain platforms (e.g. Java files for AndroidTV)
  src/                  -> Main code folder
    __mocks__/          -> mocks
    __tests__/          -> Unit tests
    client/             -> Client side entry
    components/         -> Stateless 'dumb' presentational components
    config/             -> Routes, templates, app and server configurations
    containers/         -> Stateful 'smart' components
    context/            -> React Context related files
    hooks/              -> React Hooks related files
    models/             -> Models consumed from the services and view
    providers/          -> React Providers related files
    services/           -> Collected services
    static/             -> Static files such the index.ejs template
    theme/              -> Breakpoints and theme values
    utils/              -> Functions to be used in different parts of the app
    views/              -> Views components for every defined route
  webpack               -> webpack configurations for DEV and PROD
  [coverage]            -> Code coverage information (created by `npm test`)
  .browserslist		      -> BrowserList to target specific browsers with babel transpile
  .eslintignore         -> ESLint ignore patterns
  .eslintrc.js          -> ESLint configuration
  .gitignore            -> Git ignore patterns
  .prettierrc           -> Prettier configuration
  .stylelintrc.js       -> Style ling configuration
  adr.md                -> Architecture decision records file
  babel.config.js       -> Babel transpiling configuration
  changelog.md          -> Changes register file
  CONTRIBUTING.md       -> Guidance for contributions
  [db.json]             -> Json with login information for dev purposes
  jest.config.js        -> Jest testing framework configuration
  jsdoc.js              -> Configuration file for JSDoc static generation
  KNOWN_ISSUES.md       -> Record file with known issues of the application
  package.json          -> NPM project definition file. Dependencies, scripts and configuration
  README.md             -> Read me file
  tscheck.json          -> Check for TS files
  tsconfig.json         -> Typescript configuration file. Allow us to use alias within VSCode
  tsling.json
Notes
- Names wrapped in 
[]are not tracked by Git. src/client/client.js: Only called in the client app
Conventions
We try to use a structure including a folder with an index and a main javascript file with the logic. Views folder is not following that due to react-suspense strategy. This way we can import the folder without specify the file or the need of import an index and coherce the specific module wihin a constant
Folder structure
src/
  services/
    i18n/
      index.js  -> just exports the i18n import
      i18n.js   -> exports all the required modules
Consuming modules
import i18n from "#/services/i18n"
High-Level App Structure
Both entry points will import two important sections, although they will configure them in a different manner:
src/containers/App/App.js:- Contains the 
AppContentorAppShell - Holds components like the 
WelcomeMessagein web or handles the key listeners on TV - It is outside of the router
 
- Contains the 
 src/config/routes.jswill be passed to React Routersrc/views/ViewContainer/ViewContainer.js:- The layout wrapper applied to all routes
 
src/views/VikimapPege/ModularPage.js:- One of the most important views, will use the route to fetch Accedo One and render the entries
 
Module Aliases
We use path alliases to improve the readability of the code.
Original
import i18n from '../../../services/i18n';
With Aliases
import i18n from '#/services/i18n';
If you need more info about module aliases configurations for all the involved tools please check the next links
- Project configuration files
tsconfig.json--> alias for Visual Code Studio. We can navigate to the module by clicking on it with command/control + clickwebpack/alias.js--> Exports the alias to enable the build of the client applicationjest.config.js--> Jest configuration to resolve the alias with the testing framwork
 - Documentation of the tools