diff --git a/server/src/storage/accounts.ts b/server/src/storage/accounts.ts
new file mode 100644
index 0000000..77a8d9d
--- /dev/null
+++ b/server/src/storage/accounts.ts
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2022 Savoir-faire Linux Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program.  If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+import { readFileSync } from 'node:fs';
+import { writeFile } from 'node:fs/promises';
+
+import { Service } from 'typedi';
+
+@Service()
+export class Accounts {
+  private readonly filename = 'accounts.json';
+  private accounts: Record<string, string>;
+
+  constructor() {
+    let buffer: Buffer;
+
+    try {
+      buffer = readFileSync(this.filename);
+    } catch (e) {
+      buffer = Buffer.from('{}');
+    }
+
+    this.accounts = JSON.parse(buffer.toString());
+  }
+
+  get(username: string): string | undefined {
+    return this.accounts[username];
+  }
+
+  set(username: string, password: string): void {
+    this.accounts[username] = password;
+  }
+
+  async save(): Promise<void> {
+    await writeFile(this.filename, JSON.stringify(this.accounts, null, 2) + '\n');
+  }
+}
diff --git a/server/src/storage/admin-account.ts b/server/src/storage/admin-account.ts
new file mode 100644
index 0000000..b207cfd
--- /dev/null
+++ b/server/src/storage/admin-account.ts
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2022 Savoir-faire Linux Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program.  If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+import { readFileSync } from 'node:fs';
+import { writeFile } from 'node:fs/promises';
+
+import { Service } from 'typedi';
+
+@Service()
+export class AdminAccount {
+  private readonly filename = 'admin.json';
+  private account: { admin: string };
+
+  constructor() {
+    let buffer: Buffer;
+
+    try {
+      buffer = readFileSync(this.filename);
+    } catch (e) {
+      buffer = Buffer.from('{}');
+    }
+
+    this.account = JSON.parse(buffer.toString());
+  }
+
+  get(): string | undefined {
+    return this.account.admin;
+  }
+
+  set(password: string): void {
+    this.account.admin = password;
+  }
+
+  async save(): Promise<void> {
+    await writeFile(this.filename, JSON.stringify(this.account, null, 2) + '\n');
+  }
+}
diff --git a/server/src/storage/signing-keys.ts b/server/src/storage/signing-keys.ts
new file mode 100644
index 0000000..8e48c94
--- /dev/null
+++ b/server/src/storage/signing-keys.ts
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2022 Savoir-faire Linux Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program.  If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+import { importPKCS8, importSPKI, KeyLike } from 'jose';
+import { Service } from 'typedi';
+
+@Service()
+export class SigningKeys {
+  privateKey!: KeyLike;
+  publicKey!: KeyLike;
+
+  async build() {
+    const privatekey = process.env.PRIVATE_KEY;
+    const publicKey = process.env.PUBLIC_KEY;
+
+    if (privatekey === undefined || publicKey === undefined) {
+      throw new Error('Missing private or public key environment variables. Try running "npm run genkeys"');
+    }
+
+    this.privateKey = await importPKCS8(privatekey, 'EdDSA');
+    this.publicKey = await importSPKI(publicKey, 'EdDSA');
+
+    return this;
+  }
+}
