diff --git a/docs/references.md b/docs/references.md
index f9122ed..c259fd3 100644
--- a/docs/references.md
+++ b/docs/references.md
@@ -14,6 +14,10 @@ https://www.robinwieruch.de/react-state-usereducer-usestate-usecontext/
 React with Redux and hooks
 https://medium.com/@koss_lebedev/rematch-with-hooks-50a8380c46e4
 
+Layouts
+https://stackoverflow.com/questions/33996484/using-multiple-layouts-for-react-router-components
+https://gist.github.com/avinmathew/e82fe7e757b20cb337d5219e0ab8dc2c
+
 #### TypeScript
 
 Typescript Book:
diff --git a/src/Administration/Accounts/AccountsEditor/.gitkeep b/src/AdministrationModule/Accounts/AccountsEditor/.gitkeep
similarity index 100%
rename from src/Administration/Accounts/AccountsEditor/.gitkeep
rename to src/AdministrationModule/Accounts/AccountsEditor/.gitkeep
diff --git a/src/Administration/Accounts/AccountsList/.gitkeep b/src/AdministrationModule/Accounts/AccountsList/.gitkeep
similarity index 100%
rename from src/Administration/Accounts/AccountsList/.gitkeep
rename to src/AdministrationModule/Accounts/AccountsList/.gitkeep
diff --git a/src/Administration/Administration.tsx b/src/AdministrationModule/Administration.tsx
similarity index 100%
rename from src/Administration/Administration.tsx
rename to src/AdministrationModule/Administration.tsx
diff --git a/src/Administration/AdministrationDocs.md b/src/AdministrationModule/AdministrationDocs.md
similarity index 100%
rename from src/Administration/AdministrationDocs.md
rename to src/AdministrationModule/AdministrationDocs.md
diff --git a/src/Administration/Users/UsersEditor/.gitkeep b/src/AdministrationModule/Users/UsersEditor/.gitkeep
similarity index 100%
rename from src/Administration/Users/UsersEditor/.gitkeep
rename to src/AdministrationModule/Users/UsersEditor/.gitkeep
diff --git a/src/Administration/Users/UsersList/.gitkeep b/src/AdministrationModule/Users/UsersList/.gitkeep
similarity index 100%
rename from src/Administration/Users/UsersList/.gitkeep
rename to src/AdministrationModule/Users/UsersList/.gitkeep
diff --git a/src/Administration/index.tsx b/src/AdministrationModule/index.tsx
similarity index 100%
rename from src/Administration/index.tsx
rename to src/AdministrationModule/index.tsx
diff --git a/src/AppDocs.md b/src/AppDocs.md
index d10bd78..20085a5 100644
--- a/src/AppDocs.md
+++ b/src/AppDocs.md
@@ -1,25 +1,32 @@
-# App module
+# App
 
 This is the application entry component. It handles the main routing and authentication redirects.
-Sub modules
+The App consists from nested modules, each of them has it's own purpose.
 
-### Account
-single account management module
-
-### Admin
+### Administration Module
 all accounts and users management module (convenient for superusers, can be extended)
 
-### Content
+### Auth Module
+user authentication: login, logout, signup, recover
+
+### Content Module
 content management module (useful for creating various entities like books, articles, posts, pages, etc)
 
-### Demo
+### Demo Module
 theme demo pages
 
-### NotFound
-Fallback page, if route doesn't match any module
+### Misc Module
+misc pages like not found page
+
+### Organization Module
+manage user organizations and organization teams
 
-### Profile
-logged-in user profile management module
+### Profile Module
+manage user profile
 
-### Sales
+### Sales Module
 can be used for managing sales/orders
+
+### Service Module
+
+The services module allows to manage different institutions provided services
diff --git a/src/AppRouter.tsx b/src/AppRouter.tsx
index a6f27ce..89c00d2 100644
--- a/src/AppRouter.tsx
+++ b/src/AppRouter.tsx
@@ -13,19 +13,21 @@ import config from './_config'
 import authService from './_services/authService'
 import { useAppState, useAppStateMethods } from './_state/appState'
 
+import DashboardLayout from '_layouts/DashboardLayout'
+
 // Import application modules
-import Sales from './Sales'
-import Content from './Content'
-import Admin from './Administration'
+import Sales from './SalesModule'
+import Content from './ContentModule'
+import Administration from './AdministrationModule'
 
 // Import core modules
-import Auth from './Auth/Auth'
-import Profile from './Profile'
-import Organization from './Organization'
-import NotFound from './Misc/NotFound'
+import Auth from './AuthModule/Auth'
+import Profile from './ProfileModule'
+import Organization from './OrganizationModule'
+import NotFound from './MiscModule/NotFound'
 
 // Theme demo module
-import Demo from './Demo'
+import Demo from './DemoModule'
 
 const LoggedInRouter = () => {
   const { loading, error } = useAppState()
@@ -41,13 +43,21 @@ const LoggedInRouter = () => {
   return (
     <Switch>
       <Route exact path="/" render={() => <Redirect to="/sales/dashboard" />} />
-      <Route path={`/sales`} component={Sales} />
-      <Route path={`/content`} component={Content} />
-      <Route path={`/admin`} component={Admin} />
-      <Route path={`/profile`} component={Profile} />
-      <Route path={`/account`} component={Organization} />
-      <Route path={`/demo`} component={Demo} />
-      <Route component={NotFound} />
+      <RouteWithLayout path={`/sales`} component={Sales} layout={DashboardLayout} />
+      <RouteWithLayout path={`/content`} component={Content} layout={DashboardLayout} />
+      <RouteWithLayout
+        path={`/admin`}
+        component={Administration}
+        layout={DashboardLayout}
+      />
+      <RouteWithLayout path={`/profile`} component={Profile} layout={DashboardLayout} />
+      <RouteWithLayout
+        path={`/account`}
+        component={Organization}
+        layout={DashboardLayout}
+      />
+      <RouteWithLayout path={`/demo`} component={Demo} layout={DashboardLayout} />
+      <RouteWithLayout component={NotFound} layout={DashboardLayout} />
     </Switch>
   )
 }
@@ -58,13 +68,32 @@ const AppRouterComponent: React.ComponentType<any> =
 
 const AppRouter: React.FC = () => (
   <AppRouterComponent>
-    <Route path="/auth" component={Auth} />
-    <PrivateRoute path="/" component={LoggedInRouter} />
+    <Switch>
+      <Route path="/auth" component={Auth} />
+      <RoutePrivate path="/" component={LoggedInRouter} />
+    </Switch>
   </AppRouterComponent>
 )
 
+const RouteWithLayout = ({ component: Component, layout: Layout, ...rest }: any) => (
+  <Route
+    {...rest}
+    render={props => {
+      if (Layout) {
+        return (
+          <Layout>
+            <Component {...props} />
+          </Layout>
+        )
+      } else {
+        return <Component {...props} />
+      }
+    }}
+  />
+)
+
 // See https://reacttraining.com/react-router/web/example/auth-workflow
-const PrivateRoute: React.FC<RouteProps> = ({
+const RoutePrivate: React.FC<RouteProps> = ({
   component: Component,
   ...rest
 }: RouteProps) => {
diff --git a/src/Auth/Auth.tsx b/src/AuthModule/Auth.tsx
similarity index 100%
rename from src/Auth/Auth.tsx
rename to src/AuthModule/Auth.tsx
diff --git a/src/Auth/AuthDocs.md b/src/AuthModule/AuthDocs.md
similarity index 100%
rename from src/Auth/AuthDocs.md
rename to src/AuthModule/AuthDocs.md
diff --git a/src/Auth/Login/Login.tsx b/src/AuthModule/Login/Login.tsx
similarity index 100%
rename from src/Auth/Login/Login.tsx
rename to src/AuthModule/Login/Login.tsx
diff --git a/src/Auth/Recover/Recover.tsx b/src/AuthModule/Recover/Recover.tsx
similarity index 100%
rename from src/Auth/Recover/Recover.tsx
rename to src/AuthModule/Recover/Recover.tsx
diff --git a/src/Auth/Reset/Reset.tsx b/src/AuthModule/Reset/Reset.tsx
similarity index 100%
rename from src/Auth/Reset/Reset.tsx
rename to src/AuthModule/Reset/Reset.tsx
diff --git a/src/Auth/Signup/Signup.tsx b/src/AuthModule/Signup/Signup.tsx
similarity index 100%
rename from src/Auth/Signup/Signup.tsx
rename to src/AuthModule/Signup/Signup.tsx
diff --git a/src/Auth/index.tsx b/src/AuthModule/index.tsx
similarity index 100%
rename from src/Auth/index.tsx
rename to src/AuthModule/index.tsx
diff --git a/src/Content/CategoriesEditor/.gitkeep b/src/ContentModule/CategoriesEditor/.gitkeep
similarity index 100%
rename from src/Content/CategoriesEditor/.gitkeep
rename to src/ContentModule/CategoriesEditor/.gitkeep
diff --git a/src/Content/CategoriesList/.gitkeep b/src/ContentModule/CategoriesList/.gitkeep
similarity index 100%
rename from src/Content/CategoriesList/.gitkeep
rename to src/ContentModule/CategoriesList/.gitkeep
diff --git a/src/Content/Content.tsx b/src/ContentModule/Content.tsx
similarity index 100%
rename from src/Content/Content.tsx
rename to src/ContentModule/Content.tsx
diff --git a/src/Content/ContentDocs.md b/src/ContentModule/ContentDocs.md
similarity index 100%
rename from src/Content/ContentDocs.md
rename to src/ContentModule/ContentDocs.md
diff --git a/src/Content/ItemsEditor/.gitkeep b/src/ContentModule/ItemsEditor/.gitkeep
similarity index 100%
rename from src/Content/ItemsEditor/.gitkeep
rename to src/ContentModule/ItemsEditor/.gitkeep
diff --git a/src/Content/ItemsList/.gitkeep b/src/ContentModule/ItemsList/.gitkeep
similarity index 100%
rename from src/Content/ItemsList/.gitkeep
rename to src/ContentModule/ItemsList/.gitkeep
diff --git a/src/Content/_api/_data/itemsCategoriesData.js b/src/ContentModule/_api/_data/itemsCategoriesData.js
similarity index 100%
rename from src/Content/_api/_data/itemsCategoriesData.js
rename to src/ContentModule/_api/_data/itemsCategoriesData.js
diff --git a/src/Content/_api/_data/itemsData.js b/src/ContentModule/_api/_data/itemsData.js
similarity index 100%
rename from src/Content/_api/_data/itemsData.js
rename to src/ContentModule/_api/_data/itemsData.js
diff --git a/src/Content/_api/_data/itemsItemsCategoriesData.js b/src/ContentModule/_api/_data/itemsItemsCategoriesData.js
similarity index 100%
rename from src/Content/_api/_data/itemsItemsCategoriesData.js
rename to src/ContentModule/_api/_data/itemsItemsCategoriesData.js
diff --git a/src/Content/_api/_mocks/.gitkeep b/src/ContentModule/_api/_mocks/.gitkeep
similarity index 100%
rename from src/Content/_api/_mocks/.gitkeep
rename to src/ContentModule/_api/_mocks/.gitkeep
diff --git a/src/Content/_api/itemsCategoriesService.tsx b/src/ContentModule/_api/itemsCategoriesService.tsx
similarity index 100%
rename from src/Content/_api/itemsCategoriesService.tsx
rename to src/ContentModule/_api/itemsCategoriesService.tsx
diff --git a/src/Content/_api/itemsService.tsx b/src/ContentModule/_api/itemsService.tsx
similarity index 100%
rename from src/Content/_api/itemsService.tsx
rename to src/ContentModule/_api/itemsService.tsx
diff --git a/src/Content/_types/Item.tsx b/src/ContentModule/_types/Item.tsx
similarity index 100%
rename from src/Content/_types/Item.tsx
rename to src/ContentModule/_types/Item.tsx
diff --git a/src/Content/_types/ItemCategory.tsx b/src/ContentModule/_types/ItemCategory.tsx
similarity index 100%
rename from src/Content/_types/ItemCategory.tsx
rename to src/ContentModule/_types/ItemCategory.tsx
diff --git a/src/Content/index.tsx b/src/ContentModule/index.tsx
similarity index 100%
rename from src/Content/index.tsx
rename to src/ContentModule/index.tsx
diff --git a/src/Demo/Demo.tsx b/src/Demo/Demo.tsx
deleted file mode 100644
index 81004ca..0000000
--- a/src/Demo/Demo.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react'
-import { Switch, Route, RouteComponentProps } from 'react-router-dom'
-
-import DashboardLayout from '_layouts/DashboardLayout'
-
-import Features from './Features'
-import Docs from './Docs'
-import Supporters from './Supporters'
-import Discuss from './Discuss'
-
-export interface DemoProps extends RouteComponentProps {}
-
-const Demo: React.FC<DemoProps> = ({ match }) => {
-  return (
-    <DashboardLayout>
-      <Switch>
-        <Route path={`${match.url}/features`} component={Features} />
-        <Route path={`${match.url}/docs`} component={Docs} />
-        <Route path={`${match.url}/supporters`} component={Supporters} />
-        <Route path={`${match.url}/discuss`} component={Discuss} />
-      </Switch>
-    </DashboardLayout>
-  )
-}
-
-export default Demo
diff --git a/src/Demo/Components/Components.tsx b/src/DemoModule/Components/Components.tsx
similarity index 100%
rename from src/Demo/Components/Components.tsx
rename to src/DemoModule/Components/Components.tsx
diff --git a/src/Demo/Components/index.tsx b/src/DemoModule/Components/index.tsx
similarity index 100%
rename from src/Demo/Components/index.tsx
rename to src/DemoModule/Components/index.tsx
diff --git a/src/DemoModule/Demo.tsx b/src/DemoModule/Demo.tsx
new file mode 100644
index 0000000..7918c62
--- /dev/null
+++ b/src/DemoModule/Demo.tsx
@@ -0,0 +1,22 @@
+import React from 'react'
+import { Switch, Route, RouteComponentProps } from 'react-router-dom'
+
+import Features from './Features'
+import Docs from './Docs'
+import Supporters from './Supporters'
+import Discuss from './Discuss'
+
+export interface DemoProps extends RouteComponentProps {}
+
+const Demo: React.FC<DemoProps> = ({ match }) => {
+  return (
+    <Switch>
+      <Route path={`${match.url}/features`} component={Features} />
+      <Route path={`${match.url}/docs`} component={Docs} />
+      <Route path={`${match.url}/supporters`} component={Supporters} />
+      <Route path={`${match.url}/discuss`} component={Discuss} />
+    </Switch>
+  )
+}
+
+export default Demo
diff --git a/src/Demo/DemoDocs.md b/src/DemoModule/DemoDocs.md
similarity index 100%
rename from src/Demo/DemoDocs.md
rename to src/DemoModule/DemoDocs.md
diff --git a/src/Demo/Discuss/Discuss.tsx b/src/DemoModule/Discuss/Discuss.tsx
similarity index 100%
rename from src/Demo/Discuss/Discuss.tsx
rename to src/DemoModule/Discuss/Discuss.tsx
diff --git a/src/Demo/Discuss/index.tsx b/src/DemoModule/Discuss/index.tsx
similarity index 100%
rename from src/Demo/Discuss/index.tsx
rename to src/DemoModule/Discuss/index.tsx
diff --git a/src/Demo/Docs/Docs.tsx b/src/DemoModule/Docs/Docs.tsx
similarity index 100%
rename from src/Demo/Docs/Docs.tsx
rename to src/DemoModule/Docs/Docs.tsx
diff --git a/src/Demo/Docs/index.tsx b/src/DemoModule/Docs/index.tsx
similarity index 100%
rename from src/Demo/Docs/index.tsx
rename to src/DemoModule/Docs/index.tsx
diff --git a/src/Demo/Features/Features.tsx b/src/DemoModule/Features/Features.tsx
similarity index 100%
rename from src/Demo/Features/Features.tsx
rename to src/DemoModule/Features/Features.tsx
diff --git a/src/Demo/Features/index.tsx b/src/DemoModule/Features/index.tsx
similarity index 100%
rename from src/Demo/Features/index.tsx
rename to src/DemoModule/Features/index.tsx
diff --git a/src/Demo/Supporters/Supporters.tsx b/src/DemoModule/Supporters/Supporters.tsx
similarity index 100%
rename from src/Demo/Supporters/Supporters.tsx
rename to src/DemoModule/Supporters/Supporters.tsx
diff --git a/src/Demo/Supporters/index.tsx b/src/DemoModule/Supporters/index.tsx
similarity index 100%
rename from src/Demo/Supporters/index.tsx
rename to src/DemoModule/Supporters/index.tsx
diff --git a/src/Demo/index.tsx b/src/DemoModule/index.tsx
similarity index 100%
rename from src/Demo/index.tsx
rename to src/DemoModule/index.tsx
diff --git a/src/EmptyModule/EmptyModule.tsx b/src/EmptyModule/EmptyModule.tsx
new file mode 100644
index 0000000..826dda6
--- /dev/null
+++ b/src/EmptyModule/EmptyModule.tsx
@@ -0,0 +1,7 @@
+import React from 'react'
+
+const EmptyModule = () => {
+  return <div>EmptyModule</div>
+}
+
+export default EmptyModule
diff --git a/src/Sales/SalesService.tsx b/src/EmptyModule/_api/index.ts
similarity index 100%
rename from src/Sales/SalesService.tsx
rename to src/EmptyModule/_api/index.ts
diff --git a/src/Sales/_api/_data/customersData.ts b/src/EmptyModule/index.tsx
similarity index 100%
rename from src/Sales/_api/_data/customersData.ts
rename to src/EmptyModule/index.tsx
diff --git a/src/Misc/NotFound/NotFound.tsx b/src/MiscModule/NotFound/NotFound.tsx
similarity index 100%
rename from src/Misc/NotFound/NotFound.tsx
rename to src/MiscModule/NotFound/NotFound.tsx
diff --git a/src/Misc/NotFound/NotFoundDocs.md b/src/MiscModule/NotFound/NotFoundDocs.md
similarity index 100%
rename from src/Misc/NotFound/NotFoundDocs.md
rename to src/MiscModule/NotFound/NotFoundDocs.md
diff --git a/src/Misc/NotFound/index.tsx b/src/MiscModule/NotFound/index.tsx
similarity index 100%
rename from src/Misc/NotFound/index.tsx
rename to src/MiscModule/NotFound/index.tsx
diff --git a/src/Organization/Account.tsx b/src/OrganizationModule/Account.tsx
similarity index 100%
rename from src/Organization/Account.tsx
rename to src/OrganizationModule/Account.tsx
diff --git a/src/Organization/AccountDocs.md b/src/OrganizationModule/AccountDocs.md
similarity index 100%
rename from src/Organization/AccountDocs.md
rename to src/OrganizationModule/AccountDocs.md
diff --git a/src/Organization/Preview/.gitkeep b/src/OrganizationModule/Preview/.gitkeep
similarity index 100%
rename from src/Organization/Preview/.gitkeep
rename to src/OrganizationModule/Preview/.gitkeep
diff --git a/src/Organization/Settings/.gitkeep b/src/OrganizationModule/Settings/.gitkeep
similarity index 100%
rename from src/Organization/Settings/.gitkeep
rename to src/OrganizationModule/Settings/.gitkeep
diff --git a/src/Organization/Users/UsersEditor/.gitkeep b/src/OrganizationModule/Users/UsersEditor/.gitkeep
similarity index 100%
rename from src/Organization/Users/UsersEditor/.gitkeep
rename to src/OrganizationModule/Users/UsersEditor/.gitkeep
diff --git a/src/Organization/Users/UsersList/.gitkeep b/src/OrganizationModule/Users/UsersList/.gitkeep
similarity index 100%
rename from src/Organization/Users/UsersList/.gitkeep
rename to src/OrganizationModule/Users/UsersList/.gitkeep
diff --git a/src/Organization/index.tsx b/src/OrganizationModule/index.tsx
similarity index 100%
rename from src/Organization/index.tsx
rename to src/OrganizationModule/index.tsx
diff --git a/src/Profile/Preview/.gitkeep b/src/ProfileModule/Preview/.gitkeep
similarity index 100%
rename from src/Profile/Preview/.gitkeep
rename to src/ProfileModule/Preview/.gitkeep
diff --git a/src/Profile/Profile.tsx b/src/ProfileModule/Profile.tsx
similarity index 100%
rename from src/Profile/Profile.tsx
rename to src/ProfileModule/Profile.tsx
diff --git a/src/Profile/ProfileDocs.md b/src/ProfileModule/ProfileDocs.md
similarity index 100%
rename from src/Profile/ProfileDocs.md
rename to src/ProfileModule/ProfileDocs.md
diff --git a/src/Profile/Settings/.gitkeep b/src/ProfileModule/Settings/.gitkeep
similarity index 100%
rename from src/Profile/Settings/.gitkeep
rename to src/ProfileModule/Settings/.gitkeep
diff --git a/src/Profile/index.tsx b/src/ProfileModule/index.tsx
similarity index 100%
rename from src/Profile/index.tsx
rename to src/ProfileModule/index.tsx
diff --git a/src/SalesModule/Customers/Customers.tsx b/src/SalesModule/Customers/Customers.tsx
new file mode 100644
index 0000000..febf349
--- /dev/null
+++ b/src/SalesModule/Customers/Customers.tsx
@@ -0,0 +1,24 @@
+import React from 'react'
+// import clsx from 'clsx'
+import { makeStyles } from '@material-ui/core/styles'
+
+// import DashboardLayout from '_layouts/DashboardLayout'
+// import { withDashboardLayout } from '_layouts'
+import PageContainer from '../../_common/PageContainer'
+import Paper from '@material-ui/core/Paper'
+
+import { Theme } from '_theme'
+
+const Customers = () => {
+  const classes = useStyles()
+
+  return (
+    <PageContainer>
+      <Paper>Customers</Paper>
+    </PageContainer>
+  )
+}
+
+const useStyles = makeStyles((theme: Theme) => ({}))
+
+export default Customers
diff --git a/src/Sales/Customers/CustomersEditor/.gitkeep b/src/SalesModule/Customers/CustomersEditor/.gitkeep
similarity index 100%
rename from src/Sales/Customers/CustomersEditor/.gitkeep
rename to src/SalesModule/Customers/CustomersEditor/.gitkeep
diff --git a/src/Sales/Customers/CustomersList/.gitkeep b/src/SalesModule/Customers/CustomersList/.gitkeep
similarity index 100%
rename from src/Sales/Customers/CustomersList/.gitkeep
rename to src/SalesModule/Customers/CustomersList/.gitkeep
diff --git a/src/Sales/Customers/index.tsx b/src/SalesModule/Customers/index.tsx
similarity index 100%
rename from src/Sales/Customers/index.tsx
rename to src/SalesModule/Customers/index.tsx
diff --git a/src/Sales/Locations/.gitkeep b/src/SalesModule/Locations/.gitkeep
similarity index 100%
rename from src/Sales/Locations/.gitkeep
rename to src/SalesModule/Locations/.gitkeep
diff --git a/src/SalesModule/Orders/Orders.tsx b/src/SalesModule/Orders/Orders.tsx
new file mode 100644
index 0000000..d494b83
--- /dev/null
+++ b/src/SalesModule/Orders/Orders.tsx
@@ -0,0 +1,30 @@
+import React from 'react'
+
+import Grid from '@material-ui/core/Grid'
+import Paper from '@material-ui/core/Paper'
+import Button from '@material-ui/core/Button'
+
+// import { Theme } from '_theme'
+
+// import DashboardLayout from '_layouts/DashboardLayout'
+// import { withDashboardLayout } from '_layouts'
+import PageContainer from '../../_common/PageContainer'
+import PageToolbar from '../../_common/PageToolbar'
+
+const Orders = () => {
+  const PageTitle = 'Orders'
+
+  const PageActions = (
+    <Button variant="contained" href="#contained-buttons">
+      Link
+    </Button>
+  )
+
+  return (
+    <PageContainer>
+      <PageToolbar title={PageTitle} actions={PageActions}></PageToolbar>
+    </PageContainer>
+  )
+}
+
+export default Orders
diff --git a/src/Sales/Orders/OrdersEditor/.gitkeep b/src/SalesModule/Orders/OrdersEditor/.gitkeep
similarity index 100%
rename from src/Sales/Orders/OrdersEditor/.gitkeep
rename to src/SalesModule/Orders/OrdersEditor/.gitkeep
diff --git a/src/Sales/Orders/OrdersList/.gitkeep b/src/SalesModule/Orders/OrdersList/.gitkeep
similarity index 100%
rename from src/Sales/Orders/OrdersList/.gitkeep
rename to src/SalesModule/Orders/OrdersList/.gitkeep
diff --git a/src/Sales/Orders/index.tsx b/src/SalesModule/Orders/index.tsx
similarity index 100%
rename from src/Sales/Orders/index.tsx
rename to src/SalesModule/Orders/index.tsx
diff --git a/src/Sales/Overview/OrdersHistory/OrdersHistory.tsx b/src/SalesModule/Overview/OrdersHistory/OrdersHistory.tsx
similarity index 100%
rename from src/Sales/Overview/OrdersHistory/OrdersHistory.tsx
rename to src/SalesModule/Overview/OrdersHistory/OrdersHistory.tsx
diff --git a/src/Sales/Overview/OrdersHistory/index.tsx b/src/SalesModule/Overview/OrdersHistory/index.tsx
similarity index 100%
rename from src/Sales/Overview/OrdersHistory/index.tsx
rename to src/SalesModule/Overview/OrdersHistory/index.tsx
diff --git a/src/Sales/Overview/OrdersHistory/ordersHistoryService.ts b/src/SalesModule/Overview/OrdersHistory/ordersHistoryService.ts
similarity index 100%
rename from src/Sales/Overview/OrdersHistory/ordersHistoryService.ts
rename to src/SalesModule/Overview/OrdersHistory/ordersHistoryService.ts
diff --git a/src/Sales/Overview/OrdersLatest/OrdersLatest.tsx b/src/SalesModule/Overview/OrdersLatest/OrdersLatest.tsx
similarity index 100%
rename from src/Sales/Overview/OrdersLatest/OrdersLatest.tsx
rename to src/SalesModule/Overview/OrdersLatest/OrdersLatest.tsx
diff --git a/src/Sales/Overview/OrdersLatest/index.tsx b/src/SalesModule/Overview/OrdersLatest/index.tsx
similarity index 100%
rename from src/Sales/Overview/OrdersLatest/index.tsx
rename to src/SalesModule/Overview/OrdersLatest/index.tsx
diff --git a/src/SalesModule/Overview/Overview.tsx b/src/SalesModule/Overview/Overview.tsx
new file mode 100644
index 0000000..90d5b36
--- /dev/null
+++ b/src/SalesModule/Overview/Overview.tsx
@@ -0,0 +1,64 @@
+import React, { useState } from 'react'
+import moment from 'moment'
+// import clsx from 'clsx'
+// import { makeStyles } from '@material-ui/core/styles'
+
+import Grid from '@material-ui/core/Grid'
+
+// import { withDashboardLayout } from '_layouts'
+import PageContainer from '../../_common/PageContainer'
+import PageToolbar from '../../_common/PageToolbar'
+
+import { SalesDashboardProvider } from './overviewContext'
+
+import SalesDashboardActions from './OverviewActions'
+import OrdersHistory from './OrdersHistory'
+import OrdersLatest from './OrdersLatest'
+
+const SalesDashboard = () => {
+  const [filter, setFilter] = useState({
+    dateFrom: moment()
+      .subtract(14, 'day')
+      .startOf('day'),
+    dateTo: moment().startOf('day'),
+  })
+
+  const PageTitle = 'Sales Dashboard'
+
+  return (
+    <SalesDashboardProvider value={{ filter, setFilter }}>
+      <PageContainer>
+        <PageToolbar
+          title={PageTitle}
+          actionsComponent={SalesDashboardActions}
+        ></PageToolbar>
+
+        <Grid container spacing={3}>
+          {/* Chart */}
+          <Grid item xs={12} md={12} lg={12}>
+            <OrdersHistory />
+          </Grid>
+          {/* Recent Deposits */}
+          {/* <Grid item xs={12} md={4} lg={4}>
+          <Paper>
+            <Deposits />
+          </Paper>
+        </Grid> */}
+          {/* Recent Orders */}
+          <Grid item xs={12}>
+            <OrdersLatest />
+          </Grid>
+        </Grid>
+      </PageContainer>
+    </SalesDashboardProvider>
+  )
+}
+
+// const useStyles = makeStyles((theme: Theme) => ({
+//   container: {
+//     paddingTop: theme.spacing(4),
+//     paddingBottom: theme.spacing(4),
+//   },
+// }))
+
+export default SalesDashboard
diff --git a/src/Sales/Overview/OverviewActions.tsx b/src/SalesModule/Overview/OverviewActions.tsx
similarity index 100%
rename from src/Sales/Overview/OverviewActions.tsx
rename to src/SalesModule/Overview/OverviewActions.tsx
diff --git a/src/Sales/Overview/index.tsx b/src/SalesModule/Overview/index.tsx
similarity index 100%
rename from src/Sales/Overview/index.tsx
rename to src/SalesModule/Overview/index.tsx
diff --git a/src/Sales/Overview/overviewContext.ts b/src/SalesModule/Overview/overviewContext.ts
similarity index 100%
rename from src/Sales/Overview/overviewContext.ts
rename to src/SalesModule/Overview/overviewContext.ts
diff --git a/src/Sales/Payments/Payments.tsx b/src/SalesModule/Payments/Payments.tsx
similarity index 100%
rename from src/Sales/Payments/Payments.tsx
rename to src/SalesModule/Payments/Payments.tsx
diff --git a/src/Sales/Products/ProductsCategoriesEditor/.gitkeep b/src/SalesModule/Products/ProductsCategoriesEditor/.gitkeep
similarity index 100%
rename from src/Sales/Products/ProductsCategoriesEditor/.gitkeep
rename to src/SalesModule/Products/ProductsCategoriesEditor/.gitkeep
diff --git a/src/Sales/Products/ProductsCategoriesList/.gitkeep b/src/SalesModule/Products/ProductsCategoriesList/.gitkeep
similarity index 100%
rename from src/Sales/Products/ProductsCategoriesList/.gitkeep
rename to src/SalesModule/Products/ProductsCategoriesList/.gitkeep
diff --git a/src/Sales/Products/ProductsEditor/.gitkeep b/src/SalesModule/Products/ProductsEditor/.gitkeep
similarity index 100%
rename from src/Sales/Products/ProductsEditor/.gitkeep
rename to src/SalesModule/Products/ProductsEditor/.gitkeep
diff --git a/src/Sales/Products/ProductsList/.gitkeep b/src/SalesModule/Products/ProductsList/.gitkeep
similarity index 100%
rename from src/Sales/Products/ProductsList/.gitkeep
rename to src/SalesModule/Products/ProductsList/.gitkeep
diff --git a/src/SalesModule/Sales.tsx b/src/SalesModule/Sales.tsx
new file mode 100644
index 0000000..75d428f
--- /dev/null
+++ b/src/SalesModule/Sales.tsx
@@ -0,0 +1,19 @@
+import React from 'react'
+import { Switch, Route, RouteComponentProps } from 'react-router-dom'
+import Overview from './Overview'
+import Orders from './Orders'
+import Customers from './Customers'
+
+export interface SalesProps extends RouteComponentProps {}
+
+const Sales = ({ match }: SalesProps) => {
+  return (
+    <Switch>
+      <Route path={`${match.url}/dashboard`} component={Overview} />
+      <Route path={`${match.url}/orders`} component={Orders} />
+      <Route path={`${match.url}/customers`} component={Customers} />
+    </Switch>
+  )
+}
+
+export default Sales
diff --git a/src/Sales/SalesDocs.md b/src/SalesModule/SalesDocs.md
similarity index 100%
rename from src/Sales/SalesDocs.md
rename to src/SalesModule/SalesDocs.md
diff --git a/src/Sales/Stock/Stock.tsx b/src/SalesModule/Stock/Stock.tsx
similarity index 100%
rename from src/Sales/Stock/Stock.tsx
rename to src/SalesModule/Stock/Stock.tsx
diff --git a/src/Sales/Stores/Stores.tsx b/src/SalesModule/Stores/Stores.tsx
similarity index 100%
rename from src/Sales/Stores/Stores.tsx
rename to src/SalesModule/Stores/Stores.tsx
diff --git a/src/Sales/_api/_data/categoriesData.ts b/src/SalesModule/_api/_data/categoriesData.ts
similarity index 100%
rename from src/Sales/_api/_data/categoriesData.ts
rename to src/SalesModule/_api/_data/categoriesData.ts
diff --git a/src/Sales/_api/_data/locationsData.ts b/src/SalesModule/_api/_data/customersData.ts
similarity index 100%
rename from src/Sales/_api/_data/locationsData.ts
rename to src/SalesModule/_api/_data/customersData.ts
diff --git a/src/Sales/_api/_data/paymentsData.ts b/src/SalesModule/_api/_data/locationsData.ts
similarity index 100%
rename from src/Sales/_api/_data/paymentsData.ts
rename to src/SalesModule/_api/_data/locationsData.ts
diff --git a/src/Sales/_api/_data/ordersData.ts b/src/SalesModule/_api/_data/ordersData.ts
similarity index 100%
rename from src/Sales/_api/_data/ordersData.ts
rename to src/SalesModule/_api/_data/ordersData.ts
diff --git a/src/Sales/_api/_data/productsRelCategoriesData.ts b/src/SalesModule/_api/_data/paymentsData.ts
similarity index 100%
rename from src/Sales/_api/_data/productsRelCategoriesData.ts
rename to src/SalesModule/_api/_data/paymentsData.ts
diff --git a/src/Sales/_api/_data/productsData.ts b/src/SalesModule/_api/_data/productsData.ts
similarity index 100%
rename from src/Sales/_api/_data/productsData.ts
rename to src/SalesModule/_api/_data/productsData.ts
diff --git a/src/Sales/_api/_data/stockActionsData.ts b/src/SalesModule/_api/_data/productsRelCategoriesData.ts
similarity index 100%
rename from src/Sales/_api/_data/stockActionsData.ts
rename to src/SalesModule/_api/_data/productsRelCategoriesData.ts
diff --git a/src/Sales/_api/_data/stocksData.ts b/src/SalesModule/_api/_data/stockActionsData.ts
similarity index 100%
rename from src/Sales/_api/_data/stocksData.ts
rename to src/SalesModule/_api/_data/stockActionsData.ts
diff --git a/src/SalesModule/_api/_data/stocksData.ts b/src/SalesModule/_api/_data/stocksData.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/SalesModule/_api/_data/stocksData.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/Sales/_api/_mocks/index.ts b/src/SalesModule/_api/_mocks/index.ts
similarity index 100%
rename from src/Sales/_api/_mocks/index.ts
rename to src/SalesModule/_api/_mocks/index.ts
diff --git a/src/Sales/_api/_mocks/ordersMocks.ts b/src/SalesModule/_api/_mocks/ordersMocks.ts
similarity index 100%
rename from src/Sales/_api/_mocks/ordersMocks.ts
rename to src/SalesModule/_api/_mocks/ordersMocks.ts
diff --git a/src/Sales/_api/customers.ts b/src/SalesModule/_api/customers.ts
similarity index 100%
rename from src/Sales/_api/customers.ts
rename to src/SalesModule/_api/customers.ts
diff --git a/src/Sales/_api/index.ts b/src/SalesModule/_api/index.ts
similarity index 100%
rename from src/Sales/_api/index.ts
rename to src/SalesModule/_api/index.ts
diff --git a/src/Sales/_api/orders.ts b/src/SalesModule/_api/orders.ts
similarity index 100%
rename from src/Sales/_api/orders.ts
rename to src/SalesModule/_api/orders.ts
diff --git a/src/Sales/_api/products.ts b/src/SalesModule/_api/products.ts
similarity index 100%
rename from src/Sales/_api/products.ts
rename to src/SalesModule/_api/products.ts
diff --git a/src/Sales/_api/productsCategories.ts b/src/SalesModule/_api/productsCategories.ts
similarity index 100%
rename from src/Sales/_api/productsCategories.ts
rename to src/SalesModule/_api/productsCategories.ts
diff --git a/src/Sales/_services/.gitkeep b/src/SalesModule/_services/.gitkeep
similarity index 100%
rename from src/Sales/_services/.gitkeep
rename to src/SalesModule/_services/.gitkeep
diff --git a/src/Sales/_types/Customer.ts b/src/SalesModule/_types/Customer.ts
similarity index 100%
rename from src/Sales/_types/Customer.ts
rename to src/SalesModule/_types/Customer.ts
diff --git a/src/Sales/_types/EntityOwned.ts b/src/SalesModule/_types/EntityOwned.ts
similarity index 100%
rename from src/Sales/_types/EntityOwned.ts
rename to src/SalesModule/_types/EntityOwned.ts
diff --git a/src/Sales/_types/Location.ts b/src/SalesModule/_types/Location.ts
similarity index 100%
rename from src/Sales/_types/Location.ts
rename to src/SalesModule/_types/Location.ts
diff --git a/src/Sales/_types/Order.ts b/src/SalesModule/_types/Order.ts
similarity index 100%
rename from src/Sales/_types/Order.ts
rename to src/SalesModule/_types/Order.ts
diff --git a/src/Sales/_types/Payment.ts b/src/SalesModule/_types/Payment.ts
similarity index 100%
rename from src/Sales/_types/Payment.ts
rename to src/SalesModule/_types/Payment.ts
diff --git a/src/Sales/_types/Product.ts b/src/SalesModule/_types/Product.ts
similarity index 100%
rename from src/Sales/_types/Product.ts
rename to src/SalesModule/_types/Product.ts
diff --git a/src/Sales/_types/ProductAttachment.ts b/src/SalesModule/_types/ProductAttachment.ts
similarity index 100%
rename from src/Sales/_types/ProductAttachment.ts
rename to src/SalesModule/_types/ProductAttachment.ts
diff --git a/src/Sales/_types/ProductCategory.ts b/src/SalesModule/_types/ProductCategory.ts
similarity index 100%
rename from src/Sales/_types/ProductCategory.ts
rename to src/SalesModule/_types/ProductCategory.ts
diff --git a/src/Sales/_types/ProductImage.ts b/src/SalesModule/_types/ProductImage.ts
similarity index 100%
rename from src/Sales/_types/ProductImage.ts
rename to src/SalesModule/_types/ProductImage.ts
diff --git a/src/Sales/_types/ProductToProductCategory.ts b/src/SalesModule/_types/ProductToProductCategory.ts
similarity index 100%
rename from src/Sales/_types/ProductToProductCategory.ts
rename to src/SalesModule/_types/ProductToProductCategory.ts
diff --git a/src/Sales/_types/Stock.ts b/src/SalesModule/_types/Stock.ts
similarity index 100%
rename from src/Sales/_types/Stock.ts
rename to src/SalesModule/_types/Stock.ts
diff --git a/src/Sales/_types/StockAction.ts b/src/SalesModule/_types/StockAction.ts
similarity index 100%
rename from src/Sales/_types/StockAction.ts
rename to src/SalesModule/_types/StockAction.ts
diff --git a/src/Sales/index.tsx b/src/SalesModule/index.tsx
similarity index 100%
rename from src/Sales/index.tsx
rename to src/SalesModule/index.tsx
diff --git a/src/Sales/Customers/Customers.tsx b/src/SalesModule2/Customers/Customers.tsx
similarity index 100%
rename from src/Sales/Customers/Customers.tsx
rename to src/SalesModule2/Customers/Customers.tsx
diff --git a/src/SalesModule2/Customers/CustomersEditor/.gitkeep b/src/SalesModule2/Customers/CustomersEditor/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Customers/CustomersList/.gitkeep b/src/SalesModule2/Customers/CustomersList/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Customers/index.tsx b/src/SalesModule2/Customers/index.tsx
new file mode 100644
index 0000000..1ef951c
--- /dev/null
+++ b/src/SalesModule2/Customers/index.tsx
@@ -0,0 +1 @@
+export { default } from './Customers'
diff --git a/src/SalesModule2/Locations/.gitkeep b/src/SalesModule2/Locations/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/Sales/Orders/Orders.tsx b/src/SalesModule2/Orders/Orders.tsx
similarity index 100%
rename from src/Sales/Orders/Orders.tsx
rename to src/SalesModule2/Orders/Orders.tsx
diff --git a/src/SalesModule2/Orders/OrdersEditor/.gitkeep b/src/SalesModule2/Orders/OrdersEditor/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Orders/OrdersList/.gitkeep b/src/SalesModule2/Orders/OrdersList/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Orders/index.tsx b/src/SalesModule2/Orders/index.tsx
new file mode 100644
index 0000000..36573fb
--- /dev/null
+++ b/src/SalesModule2/Orders/index.tsx
@@ -0,0 +1 @@
+export { default } from './Orders'
diff --git a/src/SalesModule2/Overview/OrdersHistory/OrdersHistory.tsx b/src/SalesModule2/Overview/OrdersHistory/OrdersHistory.tsx
new file mode 100644
index 0000000..bebf792
--- /dev/null
+++ b/src/SalesModule2/Overview/OrdersHistory/OrdersHistory.tsx
@@ -0,0 +1,49 @@
+import React, { useEffect, useRef } from 'react' //useState
+import { makeStyles } from '@material-ui/core/styles'
+import Card from '@material-ui/core/Card'
+import CardContent from '@material-ui/core/CardContent'
+import { Chart } from 'chart.js'
+
+import mainHistoryService from './ordersHistoryService'
+
+// ref: https://www.robinwieruch.de/react-hooks-fetch-data/
+const MainHistory = () => {
+  const canvasRef = useRef<HTMLCanvasElement>(null)
+  const classes = useStyles()
+
+  useEffect(() => {
+    if (canvasRef.current === null) {
+      return
+    }
+
+    async function requestChartData(canvasRefNode: HTMLCanvasElement) {
+      if (!canvasRef) {
+        return
+      }
+
+      const chartConfigurationRes = await mainHistoryService.getChartConfiguration()
+
+      new Chart(canvasRefNode, chartConfigurationRes)
+    }
+    requestChartData(canvasRef.current)
+  }, [canvasRef])
+
+  return (
+    <Card>
+      <CardContent className={classes.content}>
+        Order History
+        <canvas ref={canvasRef} className={classes.chart} />
+      </CardContent>
+    </Card>
+  )
+}
+
+const useStyles = makeStyles(theme => ({
+  content: {},
+  chart: {
+    width: '100%',
+    height: '200px',
+  },
+}))
+
+export default MainHistory
diff --git a/src/SalesModule2/Overview/OrdersHistory/index.tsx b/src/SalesModule2/Overview/OrdersHistory/index.tsx
new file mode 100644
index 0000000..e2134c2
--- /dev/null
+++ b/src/SalesModule2/Overview/OrdersHistory/index.tsx
@@ -0,0 +1 @@
+export { default } from './OrdersHistory'
diff --git a/src/SalesModule2/Overview/OrdersHistory/ordersHistoryService.ts b/src/SalesModule2/Overview/OrdersHistory/ordersHistoryService.ts
new file mode 100644
index 0000000..55c6395
--- /dev/null
+++ b/src/SalesModule2/Overview/OrdersHistory/ordersHistoryService.ts
@@ -0,0 +1,131 @@
+import { Chart } from 'chart.js'
+import { random } from 'lodash'
+import moment from 'moment'
+
+// import ordersData from '../../_api/_data/ordersData'
+import api from '../../_api'
+
+export default {
+  getRandomNumber(min = 0, max = 1): number {
+    return random(min, max)
+  },
+  async getChartData(): Promise<Chart.ChartData> {
+    interface ChartDataSet extends Chart.ChartDataSets {
+      data: number[]
+    }
+
+    const orders = await api.orders.getList()
+
+    console.log('orders', orders)
+
+    const timeFormat = 'MM/DD/YYYY'
+
+    const today = moment().startOf('day')
+    const oneMonthAgo = moment(today).subtract(15, 'days')
+
+    const labels: string[] = []
+    const signups: ChartDataSet = {
+      type: 'bar',
+      label: 'Signups',
+      backgroundColor: '#e8e8e8',
+      data: [],
+    }
+    const ordersCount: ChartDataSet = {
+      type: 'line',
+      label: 'Number of orders',
+      backgroundColor: '#1e88e5',
+      borderColor: '#1e88e5',
+      fill: false,
+      data: [],
+    }
+    const ordersSum: ChartDataSet = {
+      type: 'line',
+      label: 'Total orders $',
+      backgroundColor: '#95de3c',
+      borderColor: '#95de3c',
+      fill: false,
+      data: [],
+      yAxisID: 'y-axis-2',
+    }
+
+    for (let now = moment(oneMonthAgo); now.isSameOrBefore(today); now.add(1, 'day')) {
+      labels.push(now.format(timeFormat))
+
+      const signupsValue = random(10, 150)
+      const ordersCountValue = random(0, 25)
+      const ordersSumValue = random(10, 315)
+
+      signups.data.push(signupsValue)
+      ordersCount.data.push(ordersCountValue)
+      ordersSum.data.push(ordersSumValue)
+    }
+
+    return {
+      labels,
+      datasets: [ordersSum, ordersCount, signups],
+    }
+  },
+  getChartOptions(): Chart.ChartOptions {
+    const timeFormat = 'MM/DD/YYYY'
+
+    return {
+      // responsive: true,
+      title: {
+        text: 'Chart.js Combo Time Scale',
+      },
+      scales: {
+        xAxes: [
+          {
+            type: 'time',
+            display: true,
+            time: {
+              parser: timeFormat,
+            },
+          },
+        ],
+        yAxes: [
+          {
+            type: 'linear',
+            display: true,
+            position: 'left',
+            id: 'y-axis-1',
+          },
+          {
+            type: 'linear',
+            display: true,
+            position: 'right',
+            id: 'y-axis-2',
+            // grid line settings
+            gridLines: {
+              drawOnChartArea: false, // only want the grid lines for one axis to show up
+            },
+            ticks: {
+              // Include a dollar sign in the ticks
+              callback: function(value, index, values) {
+                return '$' + value
+              },
+            },
+          },
+        ],
+      },
+      tooltips: {
+        mode: 'index',
+        intersect: false,
+      },
+      hover: {
+        mode: 'index',
+        intersect: false,
+      },
+    }
+  },
+  // In real life this would be an http call
+  async getChartConfiguration(): Promise<Chart.ChartConfiguration> {
+    const configuration = {
+      type: 'bar',
+      options: this.getChartOptions(),
+      data: await this.getChartData(),
+    }
+
+    return new Promise(resolve => setTimeout(() => resolve(configuration), 300))
+  },
+}
diff --git a/src/SalesModule2/Overview/OrdersLatest/OrdersLatest.tsx b/src/SalesModule2/Overview/OrdersLatest/OrdersLatest.tsx
new file mode 100644
index 0000000..4dc642d
--- /dev/null
+++ b/src/SalesModule2/Overview/OrdersLatest/OrdersLatest.tsx
@@ -0,0 +1,91 @@
+/* eslint-disable no-script-url */
+
+import React from 'react'
+import Link from '@material-ui/core/Link'
+import { makeStyles } from '@material-ui/core/styles'
+import Card from '@material-ui/core/Card'
+import CardContent from '@material-ui/core/CardContent'
+import Table from '@material-ui/core/Table'
+import TableBody from '@material-ui/core/TableBody'
+import TableCell from '@material-ui/core/TableCell'
+import TableHead from '@material-ui/core/TableHead'
+import TableRow from '@material-ui/core/TableRow'
+
+// Generate Order Data
+function createData(
+  id: number,
+  date: string,
+  name: string,
+  shipTo: string,
+  paymentMethod: string,
+  amount: number,
+) {
+  return { id, date, name, shipTo, paymentMethod, amount }
+}
+
+const rows = [
+  createData(0, '16 Mar, 2019', 'Elvis Presley', 'Tupelo, MS', 'VISA ⠀•••• 3719', 312.44),
+  createData(
+    1,
+    '16 Mar, 2019',
+    'Paul McCartney',
+    'London, UK',
+    'VISA ⠀•••• 2574',
+    866.99,
+  ),
+  createData(2, '16 Mar, 2019', 'Tom Scholz', 'Boston, MA', 'MC ⠀•••• 1253', 100.81),
+  createData(3, '16 Mar, 2019', 'Michael Jackson', 'Gary, IN', 'AMEX ⠀•••• 2000', 654.39),
+  createData(
+    4,
+    '15 Mar, 2019',
+    'Bruce Springsteen',
+    'Long Branch, NJ',
+    'VISA ⠀•••• 5919',
+    212.79,
+  ),
+]
+
+const MainOrders: React.FC<any> = () => {
+  const classes = useStyles()
+  return (
+    <Card>
+      <CardContent>
+        <Table size="small">
+          <TableHead>
+            <TableRow>
+              <TableCell>Date</TableCell>
+              <TableCell>Name</TableCell>
+              <TableCell>Ship To</TableCell>
+              <TableCell>Payment Method</TableCell>
+              <TableCell align="right">Sale Amount</TableCell>
+            </TableRow>
+          </TableHead>
+          <TableBody>
+            {rows.map(row => (
+              <TableRow key={row.id}>
+                <TableCell>{row.date}</TableCell>
+                <TableCell>{row.name}</TableCell>
+                <TableCell>{row.shipTo}</TableCell>
+                <TableCell>{row.paymentMethod}</TableCell>
+                <TableCell align="right">{row.amount}</TableCell>
+              </TableRow>
+            ))}
+          </TableBody>
+        </Table>
+        <div className={classes.seeMore}>
+          <Link color="primary" href="javascript:;">
+            See more orders
+          </Link>
+        </div>
+      </CardContent>
+    </Card>
+  )
+}
+
+const useStyles = makeStyles(theme => ({
+  seeMore: {
+    marginTop: theme.spacing(3),
+  },
+}))
+
+export default MainOrders
diff --git a/src/SalesModule2/Overview/OrdersLatest/index.tsx b/src/SalesModule2/Overview/OrdersLatest/index.tsx
new file mode 100644
index 0000000..a70c25c
--- /dev/null
+++ b/src/SalesModule2/Overview/OrdersLatest/index.tsx
@@ -0,0 +1 @@
+export { default } from './OrdersLatest'
diff --git a/src/Sales/Overview/Overview.tsx b/src/SalesModule2/Overview/Overview.tsx
similarity index 100%
rename from src/Sales/Overview/Overview.tsx
rename to src/SalesModule2/Overview/Overview.tsx
diff --git a/src/SalesModule2/Overview/OverviewActions.tsx b/src/SalesModule2/Overview/OverviewActions.tsx
new file mode 100644
index 0000000..3a786d5
--- /dev/null
+++ b/src/SalesModule2/Overview/OverviewActions.tsx
@@ -0,0 +1,55 @@
+import React, { useContext } from 'react'
+
+import { makeStyles } from '@material-ui/core/styles'
+import Button from '@material-ui/core/Button'
+import Tooltip from '@material-ui/core/Tooltip'
+import IconMore from '@material-ui/icons/MoreVert'
+import IconFilter from '@material-ui/icons/Tune'
+import IconDropDown from '@material-ui/icons/ArrowDropDown'
+import IconNew from '@material-ui/icons/Add'
+
+import { Theme } from '../../_theme'
+import salesDashboardContext from './overviewContext'
+
+const MainActions: React.FC<any> = () => {
+  const classes = useStyles()
+  const { filter, setFilter } = useContext(salesDashboardContext)
+
+  const dateFilterLabel = filter
+    ? `${filter.dateFrom.format('ll')} - ${filter.dateTo.format('ll')}`
+    : 'Date Filter'
+
+  return (
+    <div>
+      <Tooltip title="Date Range">
+        <Button>
+          {dateFilterLabel} <IconDropDown />
+        </Button>
+      </Tooltip>
+      <Tooltip title="Create new">
+        <Button color="secondary">
+          <IconNew className={classes.iconNew} />
+          New
+        </Button>
+      </Tooltip>
+      <Tooltip title="Filter">
+        <Button color="secondary">
+          <IconFilter />
+        </Button>
+      </Tooltip>
+      <Tooltip title="More actions">
+        <Button color="secondary">
+          <IconMore />
+        </Button>
+      </Tooltip>
+    </div>
+  )
+}
+
+const useStyles = makeStyles((theme: Theme) => ({
+  iconNew: {
+    marginRight: 5,
+  },
+}))
+
+export default MainActions
diff --git a/src/SalesModule2/Overview/index.tsx b/src/SalesModule2/Overview/index.tsx
new file mode 100644
index 0000000..1de667a
--- /dev/null
+++ b/src/SalesModule2/Overview/index.tsx
@@ -0,0 +1 @@
+export { default } from './Overview'
diff --git a/src/SalesModule2/Overview/overviewContext.ts b/src/SalesModule2/Overview/overviewContext.ts
new file mode 100644
index 0000000..ed9fb0b
--- /dev/null
+++ b/src/SalesModule2/Overview/overviewContext.ts
@@ -0,0 +1,32 @@
+import React from 'react'
+import moment, { Moment } from 'moment'
+
+export interface SalesDahsboardContextFilter {
+  dateFrom: Moment
+  dateTo: Moment
+}
+
+export interface SalesDahsboardContext {
+  filter?: SalesDahsboardContextFilter
+  setFilter?: any
+}
+
+// The default context, which is used when there is no provider
+// (might be used for components testing)
+export const salesDashboardContextDefault: SalesDahsboardContext = {
+  filter: {
+    dateFrom: moment()
+      .subtract(14, 'day')
+      .startOf('day'),
+    dateTo: moment().startOf('day'),
+  },
+}
+
+export const salesDashboardContext = React.createContext<SalesDahsboardContext>(
+  salesDashboardContextDefault,
+)
+
+export const SalesDashboardProvider = salesDashboardContext.Provider
+export const SalesDashboardConsumer = salesDashboardContext.Consumer
+
+export default salesDashboardContext
diff --git a/src/SalesModule2/Payments/Payments.tsx b/src/SalesModule2/Payments/Payments.tsx
new file mode 100644
index 0000000..de49f4f
--- /dev/null
+++ b/src/SalesModule2/Payments/Payments.tsx
@@ -0,0 +1,7 @@
+import React from 'react'
+
+const Patments = () => {
+  return <div></div>
+}
+
+export default Patments
diff --git a/src/SalesModule2/Products/ProductsCategoriesEditor/.gitkeep b/src/SalesModule2/Products/ProductsCategoriesEditor/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Products/ProductsCategoriesList/.gitkeep b/src/SalesModule2/Products/ProductsCategoriesList/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Products/ProductsEditor/.gitkeep b/src/SalesModule2/Products/ProductsEditor/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/Products/ProductsList/.gitkeep b/src/SalesModule2/Products/ProductsList/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/Sales/Sales.tsx b/src/SalesModule2/Sales.tsx
similarity index 100%
rename from src/Sales/Sales.tsx
rename to src/SalesModule2/Sales.tsx
diff --git a/src/SalesModule2/SalesDocs.md b/src/SalesModule2/SalesDocs.md
new file mode 100644
index 0000000..07654b8
--- /dev/null
+++ b/src/SalesModule2/SalesDocs.md
@@ -0,0 +1,17 @@
+# Sales module
+
+The sales module is a good if you're planning to sell some goods in your system.
+It allows you to
+
+- See the sales overview dashboard
+- See and manage the orders
+- See and manage the payments
+- See and manage the products and categories
+- See and manage the stock of products (for physical products)
+- See and manage your products locations (stores, warehouses, shops, trading points, branches, etc)
+
+Use cases
+
+- Single store
+- Stores network
+- Delivery service
diff --git a/src/SalesModule2/Stock/Stock.tsx b/src/SalesModule2/Stock/Stock.tsx
new file mode 100644
index 0000000..af38661
--- /dev/null
+++ b/src/SalesModule2/Stock/Stock.tsx
@@ -0,0 +1,7 @@
+import React from 'react'
+
+const Stock = () => {
+  return <div>Products Stock</div>
+}
+
+export default Stock
diff --git a/src/SalesModule2/Stores/Stores.tsx b/src/SalesModule2/Stores/Stores.tsx
new file mode 100644
index 0000000..43f08b2
--- /dev/null
+++ b/src/SalesModule2/Stores/Stores.tsx
@@ -0,0 +1,7 @@
+import React from 'react'
+
+const Warehouses = () => {
+  return <div>Warehouses</div>
+}
+
+export default Warehouses
diff --git a/src/SalesModule2/_api/_data/categoriesData.ts b/src/SalesModule2/_api/_data/categoriesData.ts
new file mode 100644
index 0000000..8a7d404
--- /dev/null
+++ b/src/SalesModule2/_api/_data/categoriesData.ts
@@ -0,0 +1,84 @@
+import _keyBy from 'lodash/keyBy'
+import Category from '../../_types/ProductCategory'
+
+/*
+  Electronics, Computers & Office
+    ELECTRONICS
+      TV & Video
+      Home Audio & Theater
+      Cell Phones & Accessories
+      Wearable Technology
+    COMPUTERS
+      Computers, Tablets, & PC Products
+      Monitors
+      Drives & Storage
+  Books & Audible
+  Sports & Outdoors
+*/
+
+const list: Category[] = [
+  {
+    id: 1,
+    name: 'Electronics, Computers & Office',
+  },
+  {
+    id: 2,
+    name: 'Electronics',
+    parentId: 1,
+  },
+  {
+    id: 3,
+    name: 'TV & Video',
+    parentId: 2,
+  },
+  {
+    id: 4,
+    name: 'Home Audio & Theater',
+    parentId: 2,
+  },
+  {
+    id: 5,
+    name: 'Cell Phones & Accessories',
+    parentId: 2,
+  },
+  {
+    id: 6,
+    name: 'Wearable Technology',
+    parentId: 2,
+  },
+  {
+    id: 7,
+    name: 'Computers',
+    parentId: 1,
+  },
+  {
+    id: 8,
+    name: 'Computers, Tablets, & PC Products',
+    parentId: 7,
+  },
+  {
+    id: 9,
+    name: 'Monitors',
+    parentId: 7,
+  },
+  {
+    id: 10,
+    name: 'Drives & Storage',
+    parentId: 7,
+  },
+  {
+    id: 11,
+    name: 'Books & Audible',
+  },
+  {
+    id: 11,
+    name: 'Sports & Outdoors',
+  },
+]
+
+const byId: { [key: number]: Category } = _keyBy(list, 'id')
+
+export default {
+  list,
+  byId,
+}
diff --git a/src/SalesModule2/_api/_data/customersData.ts b/src/SalesModule2/_api/_data/customersData.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/SalesModule2/_api/_data/customersData.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/SalesModule2/_api/_data/locationsData.ts b/src/SalesModule2/_api/_data/locationsData.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/SalesModule2/_api/_data/locationsData.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/SalesModule2/_api/_data/ordersData.ts b/src/SalesModule2/_api/_data/ordersData.ts
new file mode 100644
index 0000000..574dc28
--- /dev/null
+++ b/src/SalesModule2/_api/_data/ordersData.ts
@@ -0,0 +1,86 @@
+import uuidv4 from 'uuid/v4'
+import moment, { Moment } from 'moment'
+import _keyBy from 'lodash/keyBy'
+import _sortBy from 'lodash/sortBy'
+import _random from 'lodash/random'
+import _shuffle from 'lodash/shuffle'
+import Order, { OrderStatus } from '../../_types/Order'
+import productsData from './productsData'
+
+const orderStatuses: OrderStatus[] = [
+  'received',
+  'preparing',
+  'shipped',
+  'delivered',
+  'rejected',
+  'refunded',
+]
+
+// Generate orders data for lat 90 days (do it one per browser session)
+const list = generateRandomOrdersHistory(90)
+const byId: { [key: number]: Order } = _keyBy(list, 'id')
+
+export default {
+  orderStatuses,
+  list,
+  byId,
+}
+
+export function generateRandomOrdersHistory(numDays: number) {
+  let list: Order[] = []
+  const now = moment()
+
+  for (
+    let date = moment().subtract(numDays, 'days'), dayNumber = 1;
+    date.isSameOrBefore(now);
+    date.add(1, 'day'), dayNumber++
+  ) {
+    const dailyOrders = generateDailyRandomOrders(date)
+
+    list = list.concat(dailyOrders)
+  }
+
+  return list
+}
+
+export function generateDailyRandomOrders(date: Moment): Order[] {
+  // Ensure the orders are date sorted
+  return _sortBy(
+    new Array(_random(0, 10)).fill(undefined).map(num => generateRandomOrder(date)),
+    order => moment(order.createdAt).toDate(),
+  )
+}
+
+export function generateRandomOrder(date: Moment): Order {
+  const shuffledProducts = _shuffle(productsData.list)
+  const numProducts = _random(1, 3)
+  const orderProductItems = shuffledProducts.slice(0, numProducts)
+  const orderProducts = orderProductItems.map(product => ({
+    id: product.id,
+    price: product.price,
+    quantity: _random(1, 2),
+  }))
+  const orderSum = orderProducts.reduce((sum, { price = 0, quantity = 0 }) => {
+    return sum + price * quantity
+  }, 0)
+  const isSuccessfulOrder = _random(1, 10) > 2
+  const orderStatus = isSuccessfulOrder
+    ? orderStatuses[_random(0, 3)]
+    : orderStatuses[_random(4, 5)]
+  const orderDate = moment(date).set({
+    hour: _random(0, 23),
+    minute: _random(0, 59),
+    second: _random(0, 59),
+  })
+
+  const order = {
+    id: uuidv4(),
+    products: orderProducts,
+    sum: orderSum,
+    status: orderStatus,
+    createdAt: orderDate.format(),
+    updatedAt: orderDate.format(),
+  }
+
+  return order
+}
diff --git a/src/SalesModule2/_api/_data/paymentsData.ts b/src/SalesModule2/_api/_data/paymentsData.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/SalesModule2/_api/_data/paymentsData.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/SalesModule2/_api/_data/productsData.ts b/src/SalesModule2/_api/_data/productsData.ts
new file mode 100644
index 0000000..31b664e
--- /dev/null
+++ b/src/SalesModule2/_api/_data/productsData.ts
@@ -0,0 +1,50 @@
+import _keyBy from 'lodash/keyBy'
+import Product from '../../_types/Product'
+
+const list: Product[] = [
+  {
+    id: 1,
+    name: 'Simple Mobile Prepaid - Apple iPhone 6s (32GB) - Space Gray',
+    price: 300,
+  },
+  {
+    id: 2,
+    name: 'iPhoneXS',
+    price: 399,
+  },
+  {
+    id: 3,
+    name: 'Apple iPhone 6, GSM Unlocked, 64GB - Space Gray (Renewed)',
+    price: 500,
+  },
+  {
+    id: 4,
+    name: 'All-New Fire 7 Tablet (7" display, 16 GB) - Black',
+    images: [
+      {
+        url: 'https://images-na.ssl-images-amazon.com/images/I/61N1v5re7SL._SL1000_.jpg',
+      },
+    ],
+    price: 99.99,
+  },
+  {
+    id: 5,
+    name:
+      'Echo (2nd Generation) - Smart speaker with Alexa and Dolby processing  - Sandstone Fabric',
+    images: [
+      {
+        url: 'https://images-na.ssl-images-amazon.com/images/I/610d8E4usyL._SL1000_.jpg',
+      },
+    ],
+    price: 49.99,
+  },
+]
+
+const byId: { [key: number]: Product } = _keyBy(list, 'id')
+
+const productsData = {
+  list,
+  byId,
+}
+
+export default productsData
diff --git a/src/SalesModule2/_api/_data/productsRelCategoriesData.ts b/src/SalesModule2/_api/_data/productsRelCategoriesData.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/SalesModule2/_api/_data/productsRelCategoriesData.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/SalesModule2/_api/_data/stockActionsData.ts b/src/SalesModule2/_api/_data/stockActionsData.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/SalesModule2/_api/_data/stockActionsData.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/SalesModule2/_api/_data/stocksData.ts b/src/SalesModule2/_api/_data/stocksData.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/SalesModule2/_api/_data/stocksData.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/SalesModule2/_api/_mocks/index.ts b/src/SalesModule2/_api/_mocks/index.ts
new file mode 100644
index 0000000..4ef664c
--- /dev/null
+++ b/src/SalesModule2/_api/_mocks/index.ts
@@ -0,0 +1,11 @@
+import MockAdapter from 'axios-mock-adapter'
+
+import ordersMocks from './ordersMocks'
+
+const init = (mockAdapter: MockAdapter) => {
+  ordersMocks.init(mockAdapter)
+}
+
+export default {
+  init,
+}
diff --git a/src/SalesModule2/_api/_mocks/ordersMocks.ts b/src/SalesModule2/_api/_mocks/ordersMocks.ts
new file mode 100644
index 0000000..b51697c
--- /dev/null
+++ b/src/SalesModule2/_api/_mocks/ordersMocks.ts
@@ -0,0 +1,67 @@
+import uuidv4 from 'uuid/v4'
+import moment from 'moment'
+import MockAdapter from 'axios-mock-adapter'
+import ordersData from '../_data/ordersData'
+
+export default {
+  init(mock: MockAdapter) {
+    mock.onGet('/orders').reply((config: any) => {
+      console.log('request config:', config)
+
+      const matchingOrders = ordersData.list
+      const ordersRes = matchingOrders.slice(0, 49)
+
+      return [
+        200,
+        {
+          orders: ordersRes,
+          count: matchingOrders.length,
+        },
+      ]
+    })
+
+    //
+    mock.onGet(/\/orders\/.*?/).reply((config: any) => {
+      console.log('request config:', config)
+
+      const urlPaths = config.url.split('/')
+      const orderId = urlPaths[urlPaths.length - 1]
+      const order = ordersData.byId[orderId]
+
+      if (order) {
+        return [200, { ...order }]
+      } else {
+        return [404, { message: 'User not found ' }]
+      }
+    })
+
+    mock.onPut(/\/orders\/.*?/).reply((config: any) => {
+      const urlPaths = config.url.split('/')
+      const orderId = urlPaths[urlPaths.length - 1]
+      const orderData = JSON.parse(config.data)
+      const order = ordersData.byId[orderId]
+
+      if (order) {
+        return [200, { ...order, ...orderData }]
+      } else {
+        return [403, { message: 'Update not permitted' }]
+      }
+    })
+
+    mock.onPost(/\/orders/).reply((config: any) => {
+      const orderData = JSON.parse(config.data)
+      const order = {
+        ...orderData,
+        id: uuidv4(),
+        createdAt: moment().format(),
+        updatedAt: moment().format(),
+      }
+
+      return [200, order]
+    })
+
+    mock.onDelete(/\/orders\/\d+/).reply((config: any) => {
+      return [200, { message: 'Order removed' }]
+    })
+  },
+}
diff --git a/src/SalesModule2/_api/customers.ts b/src/SalesModule2/_api/customers.ts
new file mode 100644
index 0000000..61c0987
--- /dev/null
+++ b/src/SalesModule2/_api/customers.ts
@@ -0,0 +1,3 @@
+const customersService = {}
+
+export default customersService
diff --git a/src/SalesModule2/_api/index.ts b/src/SalesModule2/_api/index.ts
new file mode 100644
index 0000000..3759697
--- /dev/null
+++ b/src/SalesModule2/_api/index.ts
@@ -0,0 +1,20 @@
+import { AxiosInstance } from 'axios'
+import { ApiInitOptions } from '_api'
+
+import mocks from './_mocks'
+import orders from './orders'
+import MockAdapter from 'axios-mock-adapter/types'
+
+export interface SalesApiInitOptions extends ApiInitOptions {
+  instance: AxiosInstance
+  mockAdapter?: MockAdapter
+}
+
+const init = (options: SalesApiInitOptions) => {
+  if (options.useSampleData && options.mockAdapter) {
+    mocks.init(options.mockAdapter)
+  }
+}
+
+export default { init, orders }
+export { init, orders }
diff --git a/src/SalesModule2/_api/orders.ts b/src/SalesModule2/_api/orders.ts
new file mode 100644
index 0000000..d4db084
--- /dev/null
+++ b/src/SalesModule2/_api/orders.ts
@@ -0,0 +1,46 @@
+import { AxiosResponse } from 'axios'
+import Order, { OrderSubmissionData, OrderId } from '../_types/Order'
+import apiClient from '_api/client'
+
+export interface OrdersService {
+  getOne(orderId: OrderId): Promise<Order>
+  getList(params?: any): Promise<OrdersListResponse>
+  create(order: OrderSubmissionData): Promise<Order>
+  update(orderId: OrderId, order: OrderSubmissionData): Promise<Order>
+  remove(orderId: OrderId): Promise<any>
+}
+
+export interface OrdersListResponse {
+  orders: Order[]
+  count: number
+}
+
+const ordersService: OrdersService = {
+  getOne(orderId) {
+    return apiClient
+      .get(`/orders/${orderId}`)
+      .then((res: AxiosResponse<Order>) => res.data)
+  },
+  getList(params: any) {
+    return apiClient
+      .get(`/orders`, {
+        params,
+      })
+      .then((res: AxiosResponse<OrdersListResponse>) => res.data)
+  },
+  create(order: OrderSubmissionData) {
+    return apiClient.post(`/orders`, order).then((res: AxiosResponse<Order>) => res.data)
+  },
+  update(orderId, order) {
+    return apiClient
+      .put(`/orders/${orderId}`, order)
+      .then((res: AxiosResponse<Order>) => res.data)
+  },
+  remove(orderId) {
+    return apiClient
+      .delete(`/orders/${orderId}`)
+      .then((res: AxiosResponse<any>) => res.data)
+  },
+}
+
+export default ordersService
diff --git a/src/SalesModule2/_api/products.ts b/src/SalesModule2/_api/products.ts
new file mode 100644
index 0000000..0cba532
--- /dev/null
+++ b/src/SalesModule2/_api/products.ts
@@ -0,0 +1,3 @@
+const productsService = {}
+
+export default productsService
diff --git a/src/SalesModule2/_api/productsCategories.ts b/src/SalesModule2/_api/productsCategories.ts
new file mode 100644
index 0000000..c760c5f
--- /dev/null
+++ b/src/SalesModule2/_api/productsCategories.ts
@@ -0,0 +1,3 @@
+const productsCategoriesService = {}
+
+export default productsCategoriesService
diff --git a/src/SalesModule2/_services/.gitkeep b/src/SalesModule2/_services/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/SalesModule2/_types/Customer.ts b/src/SalesModule2/_types/Customer.ts
new file mode 100644
index 0000000..6fc701f
--- /dev/null
+++ b/src/SalesModule2/_types/Customer.ts
@@ -0,0 +1,10 @@
+import { EntityId } from '_types/Entity'
+
+export type CustomerId = EntityId
+
+export default interface Customer {
+  id?: CustomerId
+  name?: string
+  email?: string
+  details?: object
+}
diff --git a/src/SalesModule2/_types/EntityOwned.ts b/src/SalesModule2/_types/EntityOwned.ts
new file mode 100644
index 0000000..9b97a24
--- /dev/null
+++ b/src/SalesModule2/_types/EntityOwned.ts
@@ -0,0 +1,12 @@
+import Entity, { EntityId } from '_types/Entity'
+import { UserId } from '_types/User'
+import { OrganizationId } from '_types/Organization'
+
+export type EntitiyOwnedId = EntityId
+
+// The entity may be owned by an organization or an individual user
+export default interface EntityOwned extends Entity {
+  id?: EntityId
+  ownerUserId?: UserId
+  owenrOrganizationId?: OrganizationId
+}
diff --git a/src/SalesModule2/_types/Location.ts b/src/SalesModule2/_types/Location.ts
new file mode 100644
index 0000000..9e0a203
--- /dev/null
+++ b/src/SalesModule2/_types/Location.ts
@@ -0,0 +1,12 @@
+import EntityOwned, { EntitiyOwnedId } from './EntityOwned'
+
+export type LocationId = EntitiyOwnedId
+
+export default interface Location extends EntityOwned {
+  id?: LocationId
+  location?: {
+    lat: number
+    lng: number
+  }
+  name: string
+}
diff --git a/src/SalesModule2/_types/Order.ts b/src/SalesModule2/_types/Order.ts
new file mode 100644
index 0000000..378250d
--- /dev/null
+++ b/src/SalesModule2/_types/Order.ts
@@ -0,0 +1,36 @@
+import EntityOwned, { EntitiyOwnedId } from './EntityOwned'
+
+import { PaymentId } from './Payment'
+import { ProductId } from './Product'
+
+export type OrderId = EntitiyOwnedId
+export type OrderStatus =
+  | 'received'
+  | 'preparing'
+  | 'shipped'
+  | 'delivered'
+  | 'rejected'
+  | 'refunded'
+
+export interface OrderProduct {
+  id?: ProductId
+  price?: number
+  quantity?: number
+}
+
+export interface OrderSubmissionData {
+  products?: any[]
+  customerNotes?: string
+}
+
+// Order can be owned by a single account or user
+export default interface Order extends EntityOwned {
+  id?: OrderId
+  name?: string
+  status: OrderStatus
+  customerNotes?: string
+  staffNotes?: string
+  paymentId?: PaymentId
+  products?: any[]
+  sum: number
+}
diff --git a/src/SalesModule2/_types/Payment.ts b/src/SalesModule2/_types/Payment.ts
new file mode 100644
index 0000000..30f2a85
--- /dev/null
+++ b/src/SalesModule2/_types/Payment.ts
@@ -0,0 +1,10 @@
+import { EntityId } from '_types/Entity'
+
+export type PaymentId = EntityId
+
+export default interface Payment {
+  id?: PaymentId
+  status?: string
+  transactionId?: string
+  transactionStatus?: string
+}
diff --git a/src/SalesModule2/_types/Product.ts b/src/SalesModule2/_types/Product.ts
new file mode 100644
index 0000000..eee16b1
--- /dev/null
+++ b/src/SalesModule2/_types/Product.ts
@@ -0,0 +1,25 @@
+import Entity, { EntityId } from '_types/Entity'
+import { UserId } from '_types/User'
+import { OrganizationId } from '_types/Organization'
+import ProductImage from './ProductImage'
+
+export type ProductId = EntityId
+
+export interface ProductVariation {
+  name?: string
+  price?: number
+  details?: object
+}
+
+export default interface Product extends Entity {
+  id?: ProductId
+  name: string
+  details?: object
+  description?: string
+  variations?: ProductVariation[]
+  price: number
+  priceDiscounted?: number
+  images?: ProductImage[]
+  ownerUserId?: UserId
+  ownerOrganizationId?: OrganizationId
+}
diff --git a/src/SalesModule2/_types/ProductAttachment.ts b/src/SalesModule2/_types/ProductAttachment.ts
new file mode 100644
index 0000000..775b04f
--- /dev/null
+++ b/src/SalesModule2/_types/ProductAttachment.ts
@@ -0,0 +1,7 @@
+import Entity, { EntityId } from '_types/Entity'
+
+export default interface ProductAttachment extends Entity {
+  id?: EntityId
+  name?: string
+  url?: string
+}
diff --git a/src/SalesModule2/_types/ProductCategory.ts b/src/SalesModule2/_types/ProductCategory.ts
new file mode 100644
index 0000000..8a3a307
--- /dev/null
+++ b/src/SalesModule2/_types/ProductCategory.ts
@@ -0,0 +1,11 @@
+import EntityOwned, { EntitiyOwnedId } from './EntityOwned'
+import ProductImage from './ProductImage'
+
+export type ProductCategoryId = EntitiyOwnedId
+
+export default interface Category extends EntityOwned {
+  name: string
+  description?: string
+  parentId?: EntitiyOwnedId
+  images?: ProductImage[]
+}
diff --git a/src/SalesModule2/_types/ProductImage.ts b/src/SalesModule2/_types/ProductImage.ts
new file mode 100644
index 0000000..5dbb54b
--- /dev/null
+++ b/src/SalesModule2/_types/ProductImage.ts
@@ -0,0 +1,7 @@
+import Entity, { EntityId } from '_types/Entity'
+
+export default interface ProductImage extends Entity {
+  id?: EntityId
+  name?: string
+  url?: string
+}
diff --git a/src/SalesModule2/_types/ProductToProductCategory.ts b/src/SalesModule2/_types/ProductToProductCategory.ts
new file mode 100644
index 0000000..62084b5
--- /dev/null
+++ b/src/SalesModule2/_types/ProductToProductCategory.ts
@@ -0,0 +1,7 @@
+import { ProductId } from './Product'
+import { ProductCategoryId } from './ProductCategory'
+
+export default interface ProductToProductCategory {
+  productId: ProductId
+  productCategoryId: ProductCategoryId
+}
diff --git a/src/SalesModule2/_types/Stock.ts b/src/SalesModule2/_types/Stock.ts
new file mode 100644
index 0000000..7101501
--- /dev/null
+++ b/src/SalesModule2/_types/Stock.ts
@@ -0,0 +1,8 @@
+import { ProductId } from './Product'
+import { LocationId } from './Location'
+
+export default interface Stock {
+  productId: ProductId
+  locationId?: LocationId
+  qunatity: number
+}
diff --git a/src/SalesModule2/_types/StockAction.ts b/src/SalesModule2/_types/StockAction.ts
new file mode 100644
index 0000000..bc7d9b6
--- /dev/null
+++ b/src/SalesModule2/_types/StockAction.ts
@@ -0,0 +1,9 @@
+import { ProductId } from './Product'
+import { LocationId } from './Location'
+
+export default interface StockAction {
+  productId: ProductId
+  locationId?: LocationId
+  qunatity: number
+  action: string
+}
diff --git a/src/SalesModule2/index.tsx b/src/SalesModule2/index.tsx
new file mode 100644
index 0000000..4a32d0b
--- /dev/null
+++ b/src/SalesModule2/index.tsx
@@ -0,0 +1,11 @@
+import api from './_api'
+import Sales from './Sales'
+
+export interface InitOptions {}
+
+const init = (options: InitOptions) => {}
+
+const layout = 'DashboardLayout'
+
+export { default } from './Sales'
+export { init, api, layout, Sales }
diff --git a/src/Services/ServicesDocs.md b/src/ServicesModule/ServicesDocs.md
similarity index 100%
rename from src/Services/ServicesDocs.md
rename to src/ServicesModule/ServicesDocs.md
diff --git a/src/_api/index.ts b/src/_api/index.ts
index fa9279a..de59668 100644
--- a/src/_api/index.ts
+++ b/src/_api/index.ts
@@ -4,7 +4,7 @@ import organizations from './organizations'
 import users from './users'
 
 // Submodules
-import apiSales from '../Sales/_api'
+import apiSales from '../SalesModule/_api'
 
 export interface ApiInitOptions {
   useSampleData?: boolean
diff --git a/src/_layouts/BlankLayout/index.tsx b/src/_layouts/BlankLayout/index.tsx
index e69de29..1348e74 100644
--- a/src/_layouts/BlankLayout/index.tsx
+++ b/src/_layouts/BlankLayout/index.tsx
@@ -0,0 +1 @@
+export { default } from './BlankLayout'
diff --git a/src/_layouts/index.tsx b/src/_layouts/index.tsx
new file mode 100644
index 0000000..32170f6
--- /dev/null
+++ b/src/_layouts/index.tsx
@@ -0,0 +1,15 @@
+import React from 'react'
+import BlankLayout from './BlankLayout'
+import DashboardLayout from './DashboardLayout'
+
+const Wrapper = DashboardLayout
+
+const withDashboardLayout = (WrappedComponent: React.ComponentType<any>) => {
+  return () => (
+    <Wrapper>
+      <WrappedComponent />
+    </Wrapper>
+  )
+}
+
+export { withDashboardLayout }