diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..581839a
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+# MIT License
+
+Copyright (c) 2025 Witchcraft Systems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index 6194e14..d9eb2ea 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,62 @@
# pds-dash
-Frontend with stats for your ATProto PDS
\ No newline at end of file
+a frontend dashboard with stats for your ATProto PDS.
+
+## setup
+
+### prerequisites
+
+- [deno](https://deno.com/manual/getting_started/installation)
+
+### installing
+
+clone the repo, install dependencies using deno:
+
+```sh
+deno install
+```
+
+### development server
+
+local develompent server with hot reloading:
+
+```sh
+deno task dev
+```
+
+### building
+
+to build the optimized bundle run:
+
+```sh
+deno task build
+```
+
+the output will be in the `dist/` directory.
+
+## deploying
+
+we use our own CI/CD workflow at [`.forgejo/workflows/deploy.yaml`](.forgejo/workflows/deploy.yaml), but it boils down to building the project bundle and deploying it to a web server. it'll probably make more sense to host it on the same domain as your PDS, but it doesn't affect anything if you host it somewhere else.
+
+## configuring
+
+[`config.ts`](config.ts) is the main configuration file, you can find more information in the file itself.
+
+## theming
+
+the colors are designated in [`src/app.css`](src/app.css) as variables, go crazy with them
+
+the rest is done by editing the css files and style tags directly, good luck
+
+relevant files:
+
+- [`src/App.svelte`](src/App.svelte)
+- [`src/app.css`](src/app.css)
+- [`src/lib/AccountComponent.svelte`](src/lib/AccountComponent.svelte)
+- [`src/lib/PostComponent.svelte`](src/lib/PostComponent.svelte)
+
+the favicon is located at [`public/favicon.ico`](public/favicon.ico)
+
+## license
+
+MIT
diff --git a/config.ts b/config.ts
index b8284a6..8d09cf6 100644
--- a/config.ts
+++ b/config.ts
@@ -2,27 +2,36 @@
* Configuration module for the PDS Dashboard
*/
export class Config {
- /**
- * The base URL of the PDS (Personal Data Server)
- * @default "https://pds.witchcraft.systems"
- */
- static readonly PDS_URL: string = "https://pds.witchcraft.systems";
+ /**
+ * The base URL of the PDS (Personal Data Server)
+ * @default "https://pds.witchcraft.systems"
+ */
+ static readonly PDS_URL: string = "https://pds.witchcraft.systems";
- /**
- * The base URL of the frontend service for linking to replies
- * @default "https://deer.social"
- */
- static readonly FRONTEND_URL: string = "https://deer.social";
+ /**
+ * The base URL of the frontend service for linking to replies/quotes/accounts etc.
+ * @default "https://deer.social"
+ */
+ static readonly FRONTEND_URL: string = "https://deer.social";
- /**
- * Maximum number of posts to fetch from the PDS per user
- * @default 10
- */
- static readonly MAX_POSTS_PER_USER: number = 22;
+ /**
+ * Maximum number of posts to fetch from the PDS per request
+ * Should be around 20 for about 10 users on the pds
+ * The more users you have, the lower the number should be
+ * since sorting is slow and is done on the frontend
+ * @default 20
+ */
+ static readonly MAX_POSTS: number = 20;
- /**
- * Footer text for the dashboard
- * @default "Astrally projected from witchcraft.systems"
- */
- static readonly FOOTER_TEXT: string = "Astrally projected from witchcraft.systems";
-}
\ No newline at end of file
+ /**
+ * Footer text for the dashboard, you probably want to change this
+ */
+ static readonly FOOTER_TEXT: string =
+ "Astrally projected from witchcraft.systems