diff --git a/frontend/src/App/State/AppState.ts b/frontend/src/App/State/AppState.ts
index e07f42f13..38d075023 100644
--- a/frontend/src/App/State/AppState.ts
+++ b/frontend/src/App/State/AppState.ts
@@ -1,4 +1,8 @@
-import IndexerAppState, { IndexerIndexAppState } from './IndexerAppState';
+import CommandAppState from './CommandAppState';
+import IndexerAppState, {
+  IndexerIndexAppState,
+  IndexerStatusAppState,
+} from './IndexerAppState';
 import IndexerStatsAppState from './IndexerStatsAppState';
 import SettingsAppState from './SettingsAppState';
 import TagsAppState from './TagsAppState';
@@ -36,8 +40,10 @@ export interface CustomFilter {
 }
 
 interface AppState {
+  commands: CommandAppState;
   indexerIndex: IndexerIndexAppState;
   indexerStats: IndexerStatsAppState;
+  indexerStatus: IndexerStatusAppState;
   indexers: IndexerAppState;
   settings: SettingsAppState;
   tags: TagsAppState;
diff --git a/frontend/src/App/State/CommandAppState.ts b/frontend/src/App/State/CommandAppState.ts
new file mode 100644
index 000000000..1bde37371
--- /dev/null
+++ b/frontend/src/App/State/CommandAppState.ts
@@ -0,0 +1,6 @@
+import AppSectionState from 'App/State/AppSectionState';
+import Command from 'Commands/Command';
+
+export type CommandAppState = AppSectionState<Command>;
+
+export default CommandAppState;
diff --git a/frontend/src/App/State/IndexerAppState.ts b/frontend/src/App/State/IndexerAppState.ts
index df79776ff..ee769b59c 100644
--- a/frontend/src/App/State/IndexerAppState.ts
+++ b/frontend/src/App/State/IndexerAppState.ts
@@ -1,6 +1,6 @@
 import Column from 'Components/Table/Column';
 import SortDirection from 'Helpers/Props/SortDirection';
-import Indexer from 'Indexer/Indexer';
+import Indexer, { IndexerStatus } from 'Indexer/Indexer';
 import AppSectionState, {
   AppSectionDeleteState,
   AppSectionSaveState,
@@ -30,4 +30,6 @@ interface IndexerAppState
     AppSectionDeleteState,
     AppSectionSaveState {}
 
+export type IndexerStatusAppState = AppSectionState<IndexerStatus>;
+
 export default IndexerAppState;
diff --git a/frontend/src/App/State/SettingsAppState.ts b/frontend/src/App/State/SettingsAppState.ts
index bded59754..213955245 100644
--- a/frontend/src/App/State/SettingsAppState.ts
+++ b/frontend/src/App/State/SettingsAppState.ts
@@ -7,6 +7,11 @@ import DownloadClient from 'typings/DownloadClient';
 import Notification from 'typings/Notification';
 import { UiSettings } from 'typings/UiSettings';
 
+export interface AppProfileAppState
+  extends AppSectionState<Application>,
+    AppSectionDeleteState,
+    AppSectionSaveState {}
+
 export interface ApplicationAppState
   extends AppSectionState<Application>,
     AppSectionDeleteState,
@@ -24,6 +29,7 @@ export interface NotificationAppState
 export type UiSettingsAppState = AppSectionState<UiSettings>;
 
 interface SettingsAppState {
+  appProfiles: AppProfileAppState;
   applications: ApplicationAppState;
   downloadClients: DownloadClientAppState;
   notifications: NotificationAppState;
diff --git a/frontend/src/Commands/Command.ts b/frontend/src/Commands/Command.ts
new file mode 100644
index 000000000..45a5beed7
--- /dev/null
+++ b/frontend/src/Commands/Command.ts
@@ -0,0 +1,37 @@
+import ModelBase from 'App/ModelBase';
+
+export interface CommandBody {
+  sendUpdatesToClient: boolean;
+  updateScheduledTask: boolean;
+  completionMessage: string;
+  requiresDiskAccess: boolean;
+  isExclusive: boolean;
+  isLongRunning: boolean;
+  name: string;
+  lastExecutionTime: string;
+  lastStartTime: string;
+  trigger: string;
+  suppressMessages: boolean;
+  seriesId?: number;
+}
+
+interface Command extends ModelBase {
+  name: string;
+  commandName: string;
+  message: string;
+  body: CommandBody;
+  priority: string;
+  status: string;
+  result: string;
+  queued: string;
+  started: string;
+  ended: string;
+  duration: string;
+  trigger: string;
+  stateChangeTime: string;
+  sendUpdatesToClient: boolean;
+  updateScheduledTask: boolean;
+  lastExecutionTime: string;
+}
+
+export default Command;
diff --git a/frontend/src/Indexer/Index/Table/IndexerStatusCell.tsx b/frontend/src/Indexer/Index/Table/IndexerStatusCell.tsx
index 7a5f5cc10..a3d694e9d 100644
--- a/frontend/src/Indexer/Index/Table/IndexerStatusCell.tsx
+++ b/frontend/src/Indexer/Index/Table/IndexerStatusCell.tsx
@@ -12,7 +12,7 @@ interface IndexerStatusCellProps {
   className: string;
   enabled: boolean;
   redirect: boolean;
-  status: IndexerStatus;
+  status?: IndexerStatus;
   longDateFormat: string;
   timeFormat: string;
   component?: React.ElementType;
diff --git a/frontend/src/Store/Selectors/createAllIndexersSelector.js b/frontend/src/Store/Selectors/createAllIndexersSelector.ts
similarity index 71%
rename from frontend/src/Store/Selectors/createAllIndexersSelector.js
rename to frontend/src/Store/Selectors/createAllIndexersSelector.ts
index 178c54eed..76641025f 100644
--- a/frontend/src/Store/Selectors/createAllIndexersSelector.js
+++ b/frontend/src/Store/Selectors/createAllIndexersSelector.ts
@@ -1,8 +1,9 @@
 import { createSelector } from 'reselect';
+import AppState from 'App/State/AppState';
 
 function createAllIndexersSelector() {
   return createSelector(
-    (state) => state.indexers,
+    (state: AppState) => state.indexers,
     (indexers) => {
       return indexers.items;
     }
diff --git a/frontend/src/Store/Selectors/createCommandsSelector.js b/frontend/src/Store/Selectors/createCommandsSelector.ts
similarity index 71%
rename from frontend/src/Store/Selectors/createCommandsSelector.js
rename to frontend/src/Store/Selectors/createCommandsSelector.ts
index 7b9edffd9..2dd5d24a2 100644
--- a/frontend/src/Store/Selectors/createCommandsSelector.js
+++ b/frontend/src/Store/Selectors/createCommandsSelector.ts
@@ -1,8 +1,9 @@
 import { createSelector } from 'reselect';
+import AppState from 'App/State/AppState';
 
 function createCommandsSelector() {
   return createSelector(
-    (state) => state.commands,
+    (state: AppState) => state.commands,
     (commands) => {
       return commands.items;
     }
diff --git a/frontend/src/Store/Selectors/createExecutingCommandsSelector.js b/frontend/src/Store/Selectors/createExecutingCommandsSelector.ts
similarity index 78%
rename from frontend/src/Store/Selectors/createExecutingCommandsSelector.js
rename to frontend/src/Store/Selectors/createExecutingCommandsSelector.ts
index 266865a8a..dd16571fc 100644
--- a/frontend/src/Store/Selectors/createExecutingCommandsSelector.js
+++ b/frontend/src/Store/Selectors/createExecutingCommandsSelector.ts
@@ -1,9 +1,10 @@
 import { createSelector } from 'reselect';
+import AppState from 'App/State/AppState';
 import { isCommandExecuting } from 'Utilities/Command';
 
 function createExecutingCommandsSelector() {
   return createSelector(
-    (state) => state.commands.items,
+    (state: AppState) => state.commands.items,
     (commands) => {
       return commands.filter((command) => isCommandExecuting(command));
     }
diff --git a/frontend/src/Store/Selectors/createIndexerAppProfileSelector.js b/frontend/src/Store/Selectors/createIndexerAppProfileSelector.ts
similarity index 70%
rename from frontend/src/Store/Selectors/createIndexerAppProfileSelector.js
rename to frontend/src/Store/Selectors/createIndexerAppProfileSelector.ts
index dabb98b2e..7ac0889ae 100644
--- a/frontend/src/Store/Selectors/createIndexerAppProfileSelector.js
+++ b/frontend/src/Store/Selectors/createIndexerAppProfileSelector.ts
@@ -1,9 +1,10 @@
 import { createSelector } from 'reselect';
+import AppState from 'App/State/AppState';
 import { createIndexerSelectorForHook } from './createIndexerSelector';
 
-function createIndexerAppProfileSelector(indexerId) {
+function createIndexerAppProfileSelector(indexerId: number) {
   return createSelector(
-    (state) => state.settings.appProfiles.items,
+    (state: AppState) => state.settings.appProfiles.items,
     createIndexerSelectorForHook(indexerId),
     (appProfiles, indexer = {}) => {
       return appProfiles.find((profile) => {
diff --git a/frontend/src/Store/Selectors/createIndexerStatusSelector.js b/frontend/src/Store/Selectors/createIndexerStatusSelector.js
deleted file mode 100644
index 1912ea1a0..000000000
--- a/frontend/src/Store/Selectors/createIndexerStatusSelector.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import _ from 'lodash';
-import { createSelector } from 'reselect';
-
-function createIndexerStatusSelector(indexerId) {
-  return createSelector(
-    (state) => state.indexerStatus.items,
-    (indexerStatus) => {
-      return _.find(indexerStatus, { indexerId });
-    }
-  );
-}
-
-export default createIndexerStatusSelector;
diff --git a/frontend/src/Store/Selectors/createIndexerStatusSelector.ts b/frontend/src/Store/Selectors/createIndexerStatusSelector.ts
new file mode 100644
index 000000000..035dfc3c4
--- /dev/null
+++ b/frontend/src/Store/Selectors/createIndexerStatusSelector.ts
@@ -0,0 +1,15 @@
+import { find } from 'lodash';
+import { createSelector } from 'reselect';
+import AppState from 'App/State/AppState';
+import { IndexerStatus } from 'Indexer/Indexer';
+
+function createIndexerStatusSelector(indexerId: number) {
+  return createSelector(
+    (state: AppState) => state.indexerStatus.items,
+    (indexerStatus) => {
+      return find(indexerStatus, { indexerId }) as IndexerStatus | undefined;
+    }
+  );
+}
+
+export default createIndexerStatusSelector;
diff --git a/frontend/src/Store/Selectors/createTagsSelector.js b/frontend/src/Store/Selectors/createTagsSelector.ts
similarity index 68%
rename from frontend/src/Store/Selectors/createTagsSelector.js
rename to frontend/src/Store/Selectors/createTagsSelector.ts
index fbfd91cdb..f653ff6e3 100644
--- a/frontend/src/Store/Selectors/createTagsSelector.js
+++ b/frontend/src/Store/Selectors/createTagsSelector.ts
@@ -1,8 +1,9 @@
 import { createSelector } from 'reselect';
+import AppState from 'App/State/AppState';
 
 function createTagsSelector() {
   return createSelector(
-    (state) => state.tags.items,
+    (state: AppState) => state.tags.items,
     (tags) => {
       return tags;
     }