diff --git a/index.html b/index.html
index 1885d9e42a591330bb504b5cef127803f2fe48d9..20826661acf29a2f237657ceac22184d37b84d63 100644
--- a/index.html
+++ b/index.html
@@ -2,7 +2,8 @@
 <html lang="en">
   <head>
     <meta charset="UTF-8" />
-    <link rel="icon" type="image/svg+xml" href="/src/favicon.svg" />
+    <link rel="icon" type="image/png" href="/src/assets/logo_round.png" />
+    <!--<link rel="icon" type="image/svg+xml" href="/src/favicon.svg" />-->
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>REVOLT</title>
   </head>
diff --git a/package.json b/package.json
index c639394ea09035575473c7b1452c07033d03cf3e..6cc365000bf7bf3b9dc6d846cbde0e4c2faafb8e 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "version": "0.0.0",
   "scripts": {
     "dev": "vite",
-    "build": "rimraf build && tsc && vite build",
+    "build": "rimraf build && tsc --noEmit && vite build",
     "preview": "vite preview",
     "lint": "eslint 'src/**/*.{js,jsx,ts,tsx}'",
     "fmt": "prettier --write 'src/**/*.{js,jsx,ts,tsx}'",
diff --git a/public/assets/app_icon.png b/public/assets/app_icon.png
deleted file mode 100644
index 8cc3feb755a157092d4d11bbe6cd5d329756fe99..0000000000000000000000000000000000000000
Binary files a/public/assets/app_icon.png and /dev/null differ
diff --git a/public/assets/favicon.ico b/public/assets/favicon.ico
deleted file mode 100644
index 8985022729dfbbaf565625e311d1231b3a081b3c..0000000000000000000000000000000000000000
Binary files a/public/assets/favicon.ico and /dev/null differ
diff --git a/public/assets/logo.svg b/public/assets/logo.svg
deleted file mode 100644
index 3b99f7fab30eb921f71d99ac689fb5bc8d67bee4..0000000000000000000000000000000000000000
--- a/public/assets/logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="193.733" height="37.438" viewBox="0 0 193.733 37.438"><path d="M23.393,1.382c0,2.787-1.52,4.46-4.764,4.46H13.258V-2.977H18.63C21.873-2.977,23.393-1.254,23.393,1.382Zm-24-11.555,5.2,7.213V25.4h8.666V11.973h2.078l7.4,13.43h9.781l-8.21-14.089A10.355,10.355,0,0,0,32.212,1.027c0-6.183-4.358-11.2-13.075-11.2Zm60.035,0H37.634V25.4H59.426V18.46H46.3v-7.8H57.906V3.966H46.3V-2.969H59.426Zm20.981,26.86-8.818-26.86H62.365L74.984,25.4H85.83L98.449-10.173H89.276Zm56.659-9.173c0-10.693-8.058-18.194-18.194-18.194-10.085,0-18.3,7.5-18.3,18.194a17.9,17.9,0,0,0,18.3,18.244A17.815,17.815,0,0,0,137.066,7.514Zm-27.62,0c0-6.335,3.649-10.338,9.426-10.338,5.676,0,9.376,4,9.376,10.338,0,6.233-3.7,10.338-9.376,10.338C113.095,17.852,109.446,13.747,109.446,7.514ZM141.88-10.173V25.4H161.9v-6.95H150.545V-10.173Zm22.248,7.2h9.426V25.4h8.666V-2.975h9.426v-7.2H164.128Z" transform="translate(1.586 11.18)" fill="#fff" stroke="#fff" stroke-width="1"/></svg>
\ No newline at end of file
diff --git a/public/assets/inbound.mp3 b/public/assets/sounds/inbound.mp3
similarity index 100%
rename from public/assets/inbound.mp3
rename to public/assets/sounds/inbound.mp3
diff --git a/public/assets/inbound.ogg b/public/assets/sounds/inbound.ogg
similarity index 100%
rename from public/assets/inbound.ogg
rename to public/assets/sounds/inbound.ogg
diff --git a/public/assets/outbound.mp3 b/public/assets/sounds/outbound.mp3
similarity index 100%
rename from public/assets/outbound.mp3
rename to public/assets/sounds/outbound.mp3
diff --git a/public/assets/outbound.ogg b/public/assets/sounds/outbound.ogg
similarity index 100%
rename from public/assets/outbound.ogg
rename to public/assets/sounds/outbound.ogg
diff --git a/public/assets/emojis.ts b/src/assets/emojis.ts
similarity index 100%
rename from public/assets/emojis.ts
rename to src/assets/emojis.ts
diff --git a/src/assets/logo.svg b/src/assets/logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..336b23aa9c7f0c8fb105de4a3aa68488562a4a0d
--- /dev/null
+++ b/src/assets/logo.svg
@@ -0,0 +1,3 @@
+<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M290.947 209.226C290.947 227.612 280.944 238.648 259.595 238.648H224.247V180.471H259.601C280.944 180.471 290.947 191.837 290.947 209.226ZM133 133L167.222 180.583V367.669H224.254V279.094H237.93L286.63 367.689H351L296.969 274.746C312.054 271.066 325.434 262.333 334.893 249.993C344.353 237.652 349.325 222.444 348.986 206.885C348.986 166.096 320.306 133 262.938 133H167.222H133Z" fill="#FF4654" stroke="#FF4654" stroke-width="1.04306"/>
+</svg>
diff --git a/src/assets/logo_round.png b/src/assets/logo_round.png
new file mode 100644
index 0000000000000000000000000000000000000000..acc86aa3ff3ec989fc203533a6b4ec8650c386ed
Binary files /dev/null and b/src/assets/logo_round.png differ
diff --git a/public/assets/wide.svg b/src/assets/wide.svg
similarity index 100%
rename from public/assets/wide.svg
rename to src/assets/wide.svg
diff --git a/src/components/common/ChannelIcon.tsx b/src/components/common/ChannelIcon.tsx
index 2611edb68c02e8df744a0b8bf0f28c52d861b192..db8ee8841cb851056838b2f65cc56982e413d29f 100644
--- a/src/components/common/ChannelIcon.tsx
+++ b/src/components/common/ChannelIcon.tsx
@@ -8,7 +8,8 @@ interface Props extends IconBaseProps<Channels.GroupChannel | Channels.TextChann
     isServerChannel?: boolean;
 }
 
-const fallback = '/assets/group.png';
+import fallback from './assets/group.png';
+
 export default function ChannelIcon(props: Props & Omit<JSX.HTMLAttributes<HTMLImageElement>, keyof Props>) {
     const client = useContext(AppContext);
 
diff --git a/src/components/common/UserIcon.tsx b/src/components/common/UserIcon.tsx
index 7aa5e37984ae00ade272457c8c9f719167936f48..a78416d8e094eed3066df430dbee965fb86d81c4 100644
--- a/src/components/common/UserIcon.tsx
+++ b/src/components/common/UserIcon.tsx
@@ -47,7 +47,8 @@ const VoiceIndicator = styled.div<{ status: VoiceStatus }>`
     ` }
 `;
 
-const fallback = '/assets/user.png';
+import fallback from './assets/user.png';
+
 export default function UserIcon(props: Props & Omit<JSX.SVGAttributes<SVGSVGElement>, keyof Props>) {
     const client = useContext(AppContext);
 
diff --git a/public/assets/group.png b/src/components/common/assets/group.png
similarity index 100%
rename from public/assets/group.png
rename to src/components/common/assets/group.png
diff --git a/public/assets/user.png b/src/components/common/assets/user.png
similarity index 100%
rename from public/assets/user.png
rename to src/components/common/assets/user.png
diff --git a/public/assets/images/placeholder.svg b/src/components/navigation/items/placeholder.svg
similarity index 100%
rename from public/assets/images/placeholder.svg
rename to src/components/navigation/items/placeholder.svg
diff --git a/src/components/navigation/left/ServerListSidebar.tsx b/src/components/navigation/left/ServerListSidebar.tsx
index f64e4fefa13d1ab40a0679ce7338562a97beebcd..798675c3750d25f1a5d179cbb1bf47b209097b91 100644
--- a/src/components/navigation/left/ServerListSidebar.tsx
+++ b/src/components/navigation/left/ServerListSidebar.tsx
@@ -1,15 +1,17 @@
-import { Channel, Servers } from "revolt.js/dist/api/objects";
-import { Link, useLocation, useParams } from "react-router-dom";
-import { useChannels, useForceUpdate, useServers } from "../../../context/revoltjs/hooks";
+import LineDivider from "../../ui/LineDivider";
 import { mapChannelWithUnread } from "./common";
-import { Unreads } from "../../../redux/reducers/unreads";
-import { connectState } from "../../../redux/connector";
 import styled, { css } from "styled-components";
-import { Children } from "../../../types/Preact";
-import LineDivider from "../../ui/LineDivider";
 import ServerIcon from "../../common/ServerIcon";
+import { Children } from "../../../types/Preact";
 import PaintCounter from "../../../lib/PaintCounter";
 import { attachContextMenu } from 'preact-context-menu';
+import { connectState } from "../../../redux/connector";
+import { Unreads } from "../../../redux/reducers/unreads";
+import { Channel, Servers } from "revolt.js/dist/api/objects";
+import { Link, useLocation, useParams } from "react-router-dom";
+import { useChannels, useForceUpdate, useServers } from "../../../context/revoltjs/hooks";
+
+import logoSVG from '../../../assets/logo.svg';
 
 function Icon({ children, unread, size }: { children: Children, unread?: 'mention' | 'unread', size: number }) {
     return (
@@ -146,7 +148,7 @@ export function ServerListSidebar({ unreads }: Props) {
                     <ServerEntry invert
                         active={typeof server === 'undefined' && !path.startsWith('/invite')}>
                         <Icon size={36} unread={homeUnread}>
-                            <img src="/assets/app_icon.png"  />
+                            <img src={logoSVG} />
                         </Icon>
                     </ServerEntry>
                 </Link>
diff --git a/src/context/intermediate/modals/Onboarding.tsx b/src/context/intermediate/modals/Onboarding.tsx
index 17fc0fd677e68aa7432e416bcb13fa00f3095b77..032aa5f3771a8782f92b27a70226fd46f41bcc37 100644
--- a/src/context/intermediate/modals/Onboarding.tsx
+++ b/src/context/intermediate/modals/Onboarding.tsx
@@ -7,6 +7,8 @@ import Button from "../../../components/ui/Button";
 import FormField from "../../../pages/login/FormField";
 import Preloader from "../../../components/ui/Preloader";
 
+import wideSVG from '../../../assets/wide.svg';
+
 interface Props {
     onClose: () => void;
     callback: (username: string, loginAfterSuccess?: true) => Promise<void>;
@@ -32,7 +34,7 @@ export function OnboardingModal({ onClose, callback }: Props) {
             <div className={styles.header}>
                 <h1>
                     <Text id="app.special.modals.onboarding.welcome" />
-                    <img src="/assets/wide.svg" />
+                    <img src={wideSVG} />
                 </h1>
             </div>
             <div className={styles.form}>
diff --git a/src/pages/home/Home.tsx b/src/pages/home/Home.tsx
index 01371fc71a32caf60ee2828b660164a49dcae645..eaa763de5472e27121f9b753e2f41419e3360151 100644
--- a/src/pages/home/Home.tsx
+++ b/src/pages/home/Home.tsx
@@ -4,12 +4,14 @@ import { Link } from "react-router-dom";
 import { Text } from "preact-i18n";
 import Header from "../../components/ui/Header";
 
+import wideSVG from '../../assets/wide.svg';
+
 export default function Home() {
     return (
         <div className={styles.home}>
             <Header placement="primary"><Text id="app.navigation.tabs.home" /></Header>
             <h3>
-                <Text id="app.special.modals.onboarding.welcome" /> <img src="/assets/wide.svg" />
+                <Text id="app.special.modals.onboarding.welcome" /> <img src={wideSVG} />
             </h3>
             <ul>
                 <li>
diff --git a/public/assets/images/dark.svg b/src/pages/settings/assets/dark.svg
similarity index 100%
rename from public/assets/images/dark.svg
rename to src/pages/settings/assets/dark.svg
diff --git a/public/assets/images/light.svg b/src/pages/settings/assets/light.svg
similarity index 100%
rename from public/assets/images/light.svg
rename to src/pages/settings/assets/light.svg
diff --git a/public/assets/images/mutant_emoji.svg b/src/pages/settings/assets/mutant_emoji.svg
similarity index 100%
rename from public/assets/images/mutant_emoji.svg
rename to src/pages/settings/assets/mutant_emoji.svg
diff --git a/public/assets/images/noto_emoji.svg b/src/pages/settings/assets/noto_emoji.svg
similarity index 100%
rename from public/assets/images/noto_emoji.svg
rename to src/pages/settings/assets/noto_emoji.svg
diff --git a/public/assets/images/openmoji_emoji.svg b/src/pages/settings/assets/openmoji_emoji.svg
similarity index 100%
rename from public/assets/images/openmoji_emoji.svg
rename to src/pages/settings/assets/openmoji_emoji.svg
diff --git a/public/assets/images/twemoji_emoji.svg b/src/pages/settings/assets/twemoji_emoji.svg
similarity index 100%
rename from public/assets/images/twemoji_emoji.svg
rename to src/pages/settings/assets/twemoji_emoji.svg
diff --git a/src/pages/settings/panes/Appearance.tsx b/src/pages/settings/panes/Appearance.tsx
index 867d6f0e7d04ff2fc5fd1d03d72d2d2e115b318d..a746614323b97e43dc43d66d5cadee01acbc8e89 100644
--- a/src/pages/settings/panes/Appearance.tsx
+++ b/src/pages/settings/panes/Appearance.tsx
@@ -15,6 +15,14 @@ import { useIntermediate } from "../../../context/intermediate/Intermediate";
 // @ts-ignore
 import pSBC from 'shade-blend-color';
 
+import lightSVG from '../assets/light.svg';
+import darkSVG from '../assets/dark.svg';
+
+import mutantSVG from '../assets/mutant_emoji.svg';
+import notoSVG from '../assets/noto_emoji.svg';
+import openmojiSVG from '../assets/openmoji_emoji.svg';
+import twemojiSVG from '../assets/twemoji_emoji.svg';
+
 interface Props {
     settings: Settings;
 }
@@ -72,7 +80,7 @@ export function Component(props: Props & WithDispatcher) {
             <div className={styles.themes}>
                 <div className={styles.theme}>
                     <img
-                        src="/assets/images/light.svg"
+                        src={lightSVG}
                         data-active={selected === "light"}
                         onClick={() =>
                             selected !== "light" &&
@@ -84,7 +92,7 @@ export function Component(props: Props & WithDispatcher) {
                 </div>
                 <div className={styles.theme}>
                     <img
-                        src="/assets/images/dark.svg"
+                        src={darkSVG}
                         data-active={selected === "dark"}
                         onClick={() =>
                             selected !== "dark" && setTheme({ preset: "dark" })
@@ -131,7 +139,7 @@ export function Component(props: Props & WithDispatcher) {
                         <div className={styles.button}
                             onClick={() => setEmojiPack('mutant')}
                             data-active={emojiPack === 'mutant'}>
-                            <img src="/assets/images/mutant_emoji.svg" draggable={false} />
+                            <img src={mutantSVG} draggable={false} />
                         </div>
                         <h4>Mutant Remix <a href="https://mutant.revolt.chat" target="_blank">(by Revolt)</a></h4>
                     </div>
@@ -139,7 +147,7 @@ export function Component(props: Props & WithDispatcher) {
                         <div className={styles.button}
                             onClick={() => setEmojiPack('twemoji')}
                             data-active={emojiPack === 'twemoji'}>
-                            <img src="/assets/images/twemoji_emoji.svg" draggable={false} />
+                            <img src={twemojiSVG} draggable={false} />
                         </div>
                         <h4>Twemoji</h4>
                     </div>
@@ -149,7 +157,7 @@ export function Component(props: Props & WithDispatcher) {
                         <div className={styles.button}
                             onClick={() => setEmojiPack('openmoji')}
                             data-active={emojiPack === 'openmoji'}>
-                            <img src="/assets/images/openmoji_emoji.svg" draggable={false} />
+                            <img src={openmojiSVG} draggable={false} />
                         </div>
                         <h4>Openmoji</h4>
                     </div>
@@ -157,7 +165,7 @@ export function Component(props: Props & WithDispatcher) {
                         <div className={styles.button}
                             onClick={() => setEmojiPack('noto')}
                             data-active={emojiPack === 'noto'}>
-                            <img src="/assets/images/noto_emoji.svg" draggable={false} />
+                            <img src={notoSVG} draggable={false} />
                         </div>
                         <h4>Noto Emoji</h4>
                     </div>