diff --git a/src/story.ts b/src/story.ts
new file mode 100644
index 0000000..2163555
--- /dev/null
+++ b/src/story.ts
@@ -0,0 +1,62 @@
+/*
+ * SPDX-License-Identifier: MPL-2.0
+ *   Copyright (c) 2022 Philipp Le <philipp@philipple.de>.
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ */
+
+import nodemailer = require("nodemailer");
+
+import { username, story_config } from "./config";
+import {Client, StoryCollection, Sleeper} from "./utils"
+
+async function send_email_report(stories: StoryCollection) {
+    if ((stories.length() > 0) && (story_config.email)) {
+        const smtp = nodemailer.createTransport({
+            host: story_config.email.smtp.host,
+            port: story_config.email.smtp.port,
+            auth: {
+                user: story_config.email.smtp.user,
+                pass: story_config.email.smtp.password
+            },
+            requireTLS: story_config.email.smtp.starttls
+        });
+        let body = "IG Stories have been downloaded\n\nDetails:\n";
+        stories.users.forEach((stories, user) => {
+            if (stories.length > 0) {
+                body += `    Fetched ${stories.length} items for ${user}`
+            }
+        });
+        await smtp.sendMail({
+            from: story_config.email.from,
+            to: story_config.email.to,
+            subject: story_config.email.subject,
+            text: body
+        });
+        smtp.close();
+    }
+}
+
+const client = new Client();
+(async () => {
+    await client.login(username);
+    try {
+        const sleeper = new Sleeper();
+
+        let running = true;
+        process.on("SIGINT", (code) => {
+            running = false;
+            sleeper.cancel();
+        });
+
+        while (running) {
+            const stories = await client.get_stories(story_config.users);
+            await stories.download(story_config.destination);
+            await send_email_report(stories);
+            await sleeper.sleep_ms(story_config.sleep_sec * 1000);
+        }
+    } finally {
+        await client.logout();
+    }
+})();
