Oikos is a self-hosted web app for families who want to organize their everyday life in one place — without cloud accounts, subscriptions, or data leaving the house. It runs as a Docker container on any home server or NAS, is accessible from every device in the household, and can be installed as a PWA on phones and tablets.
diff --git a/docs/index.html b/docs/index.html
index f1321e3..6a8012e 100755
--- a/docs/index.html
+++ b/docs/index.html
@@ -651,35 +651,35 @@
-
+
Dashboard
-
+
Tasks
-
+
Meals
-
+
Shopping
-
+
Calendar
-
+
Budget
-
+
Notes
-
+
Contacts
diff --git a/docs/og-image.png b/docs/og-image.png
index caa8218..ac6f0d5 100644
Binary files a/docs/og-image.png and b/docs/og-image.png differ
diff --git a/docs/screenshots/01-mobile-dark.png b/docs/screenshots/01-mobile-dark.png
new file mode 100644
index 0000000..aa85bb1
Binary files /dev/null and b/docs/screenshots/01-mobile-dark.png differ
diff --git a/docs/screenshots/01-mobile-light.png b/docs/screenshots/01-mobile-light.png
new file mode 100644
index 0000000..d3d81cc
Binary files /dev/null and b/docs/screenshots/01-mobile-light.png differ
diff --git a/docs/screenshots/01-web-dark.png b/docs/screenshots/01-web-dark.png
new file mode 100644
index 0000000..b64a90c
Binary files /dev/null and b/docs/screenshots/01-web-dark.png differ
diff --git a/docs/screenshots/01-web-light.png b/docs/screenshots/01-web-light.png
new file mode 100644
index 0000000..7a43ef4
Binary files /dev/null and b/docs/screenshots/01-web-light.png differ
diff --git a/docs/screenshots/02-mobile-dark.png b/docs/screenshots/02-mobile-dark.png
new file mode 100644
index 0000000..3c047f1
Binary files /dev/null and b/docs/screenshots/02-mobile-dark.png differ
diff --git a/docs/screenshots/02-mobile-light.png b/docs/screenshots/02-mobile-light.png
new file mode 100644
index 0000000..51794e9
Binary files /dev/null and b/docs/screenshots/02-mobile-light.png differ
diff --git a/docs/screenshots/02-web-dark.png b/docs/screenshots/02-web-dark.png
new file mode 100644
index 0000000..8500dd6
Binary files /dev/null and b/docs/screenshots/02-web-dark.png differ
diff --git a/docs/screenshots/02-web-light.png b/docs/screenshots/02-web-light.png
new file mode 100644
index 0000000..240ab73
Binary files /dev/null and b/docs/screenshots/02-web-light.png differ
diff --git a/docs/screenshots/03-mobile-dark.png b/docs/screenshots/03-mobile-dark.png
new file mode 100644
index 0000000..c298565
Binary files /dev/null and b/docs/screenshots/03-mobile-dark.png differ
diff --git a/docs/screenshots/03-mobile-light.png b/docs/screenshots/03-mobile-light.png
new file mode 100644
index 0000000..e8be6c3
Binary files /dev/null and b/docs/screenshots/03-mobile-light.png differ
diff --git a/docs/screenshots/03-web-dark.png b/docs/screenshots/03-web-dark.png
new file mode 100644
index 0000000..b483199
Binary files /dev/null and b/docs/screenshots/03-web-dark.png differ
diff --git a/docs/screenshots/03-web-light.png b/docs/screenshots/03-web-light.png
new file mode 100644
index 0000000..65fe97c
Binary files /dev/null and b/docs/screenshots/03-web-light.png differ
diff --git a/docs/screenshots/04-mobile-dark.png b/docs/screenshots/04-mobile-dark.png
new file mode 100644
index 0000000..0d69bcf
Binary files /dev/null and b/docs/screenshots/04-mobile-dark.png differ
diff --git a/docs/screenshots/04-mobile-light.png b/docs/screenshots/04-mobile-light.png
new file mode 100644
index 0000000..b10698c
Binary files /dev/null and b/docs/screenshots/04-mobile-light.png differ
diff --git a/docs/screenshots/04-web-dark.png b/docs/screenshots/04-web-dark.png
new file mode 100644
index 0000000..25a533a
Binary files /dev/null and b/docs/screenshots/04-web-dark.png differ
diff --git a/docs/screenshots/04-web-light.png b/docs/screenshots/04-web-light.png
new file mode 100644
index 0000000..8ab836e
Binary files /dev/null and b/docs/screenshots/04-web-light.png differ
diff --git a/docs/screenshots/05-mobile-dark.png b/docs/screenshots/05-mobile-dark.png
new file mode 100644
index 0000000..82d82ba
Binary files /dev/null and b/docs/screenshots/05-mobile-dark.png differ
diff --git a/docs/screenshots/05-mobile-light.png b/docs/screenshots/05-mobile-light.png
new file mode 100644
index 0000000..d65a8a1
Binary files /dev/null and b/docs/screenshots/05-mobile-light.png differ
diff --git a/docs/screenshots/05-web-dark.png b/docs/screenshots/05-web-dark.png
new file mode 100644
index 0000000..3669783
Binary files /dev/null and b/docs/screenshots/05-web-dark.png differ
diff --git a/docs/screenshots/05-web-light.png b/docs/screenshots/05-web-light.png
new file mode 100644
index 0000000..76bd5ef
Binary files /dev/null and b/docs/screenshots/05-web-light.png differ
diff --git a/docs/screenshots/06-mobile-dark.png b/docs/screenshots/06-mobile-dark.png
new file mode 100644
index 0000000..f024411
Binary files /dev/null and b/docs/screenshots/06-mobile-dark.png differ
diff --git a/docs/screenshots/06-mobile-light.png b/docs/screenshots/06-mobile-light.png
new file mode 100644
index 0000000..d19405a
Binary files /dev/null and b/docs/screenshots/06-mobile-light.png differ
diff --git a/docs/screenshots/06-web-dark.png b/docs/screenshots/06-web-dark.png
new file mode 100644
index 0000000..b9ec963
Binary files /dev/null and b/docs/screenshots/06-web-dark.png differ
diff --git a/docs/screenshots/06-web-light.png b/docs/screenshots/06-web-light.png
new file mode 100644
index 0000000..5819164
Binary files /dev/null and b/docs/screenshots/06-web-light.png differ
diff --git a/docs/screenshots/07-mobile-dark.png b/docs/screenshots/07-mobile-dark.png
new file mode 100644
index 0000000..4b11fa8
Binary files /dev/null and b/docs/screenshots/07-mobile-dark.png differ
diff --git a/docs/screenshots/07-mobile-light.png b/docs/screenshots/07-mobile-light.png
new file mode 100644
index 0000000..a1e194a
Binary files /dev/null and b/docs/screenshots/07-mobile-light.png differ
diff --git a/docs/screenshots/07-web-dark.png b/docs/screenshots/07-web-dark.png
new file mode 100644
index 0000000..b50b9cb
Binary files /dev/null and b/docs/screenshots/07-web-dark.png differ
diff --git a/docs/screenshots/07-web-light.png b/docs/screenshots/07-web-light.png
new file mode 100644
index 0000000..a8c1c2b
Binary files /dev/null and b/docs/screenshots/07-web-light.png differ
diff --git a/docs/screenshots/08-mobile-dark.png b/docs/screenshots/08-mobile-dark.png
new file mode 100644
index 0000000..c6f7811
Binary files /dev/null and b/docs/screenshots/08-mobile-dark.png differ
diff --git a/docs/screenshots/08-mobile-light.png b/docs/screenshots/08-mobile-light.png
new file mode 100644
index 0000000..334cc04
Binary files /dev/null and b/docs/screenshots/08-mobile-light.png differ
diff --git a/docs/screenshots/08-web-dark.png b/docs/screenshots/08-web-dark.png
new file mode 100644
index 0000000..7d10b7d
Binary files /dev/null and b/docs/screenshots/08-web-dark.png differ
diff --git a/docs/screenshots/08-web-light.png b/docs/screenshots/08-web-light.png
new file mode 100644
index 0000000..fee55c1
Binary files /dev/null and b/docs/screenshots/08-web-light.png differ
diff --git a/docs/screenshots/09-mobile-dark.png b/docs/screenshots/09-mobile-dark.png
new file mode 100644
index 0000000..878b8d7
Binary files /dev/null and b/docs/screenshots/09-mobile-dark.png differ
diff --git a/docs/screenshots/09-mobile-light.png b/docs/screenshots/09-mobile-light.png
new file mode 100644
index 0000000..beac332
Binary files /dev/null and b/docs/screenshots/09-mobile-light.png differ
diff --git a/docs/screenshots/09-web-dark.png b/docs/screenshots/09-web-dark.png
new file mode 100644
index 0000000..8df6f83
Binary files /dev/null and b/docs/screenshots/09-web-dark.png differ
diff --git a/docs/screenshots/09-web-light.png b/docs/screenshots/09-web-light.png
new file mode 100644
index 0000000..3e60976
Binary files /dev/null and b/docs/screenshots/09-web-light.png differ
diff --git a/docs/screenshots/mobile-dark/mobile-dark-budget-2.png b/docs/screenshots/mobile-dark/mobile-dark-budget-2.png
deleted file mode 100644
index 0f59de1..0000000
Binary files a/docs/screenshots/mobile-dark/mobile-dark-budget-2.png and /dev/null differ
diff --git a/docs/screenshots/mobile-dark/mobile-dark-calendar.png b/docs/screenshots/mobile-dark/mobile-dark-calendar.png
deleted file mode 100644
index 27de6af..0000000
Binary files a/docs/screenshots/mobile-dark/mobile-dark-calendar.png and /dev/null differ
diff --git a/docs/screenshots/mobile-dark/mobile-dark-contacts-2.png b/docs/screenshots/mobile-dark/mobile-dark-contacts-2.png
deleted file mode 100644
index 18a22ff..0000000
Binary files a/docs/screenshots/mobile-dark/mobile-dark-contacts-2.png and /dev/null differ
diff --git a/docs/screenshots/mobile-dark/mobile-dark-dashboard-2.png b/docs/screenshots/mobile-dark/mobile-dark-dashboard-2.png
deleted file mode 100644
index b8cc91f..0000000
Binary files a/docs/screenshots/mobile-dark/mobile-dark-dashboard-2.png and /dev/null differ
diff --git a/docs/screenshots/mobile-dark/mobile-dark-meal.png b/docs/screenshots/mobile-dark/mobile-dark-meal.png
deleted file mode 100644
index 281d41c..0000000
Binary files a/docs/screenshots/mobile-dark/mobile-dark-meal.png and /dev/null differ
diff --git a/docs/screenshots/mobile-dark/mobile-dark-notes-2.png b/docs/screenshots/mobile-dark/mobile-dark-notes-2.png
deleted file mode 100644
index 5abb3da..0000000
Binary files a/docs/screenshots/mobile-dark/mobile-dark-notes-2.png and /dev/null differ
diff --git a/docs/screenshots/mobile-dark/mobile-dark-settings.png b/docs/screenshots/mobile-dark/mobile-dark-settings.png
deleted file mode 100644
index 16846b6..0000000
Binary files a/docs/screenshots/mobile-dark/mobile-dark-settings.png and /dev/null differ
diff --git a/docs/screenshots/mobile-dark/mobile-dark-shopping.png b/docs/screenshots/mobile-dark/mobile-dark-shopping.png
deleted file mode 100644
index 500b68f..0000000
Binary files a/docs/screenshots/mobile-dark/mobile-dark-shopping.png and /dev/null differ
diff --git a/docs/screenshots/mobile-dark/mobile-dark-tasks-2.png b/docs/screenshots/mobile-dark/mobile-dark-tasks-2.png
deleted file mode 100644
index 43599bf..0000000
Binary files a/docs/screenshots/mobile-dark/mobile-dark-tasks-2.png and /dev/null differ
diff --git a/docs/screenshots/mobile-light/mobile-light-budget-2.png b/docs/screenshots/mobile-light/mobile-light-budget-2.png
deleted file mode 100644
index 9a73b0a..0000000
Binary files a/docs/screenshots/mobile-light/mobile-light-budget-2.png and /dev/null differ
diff --git a/docs/screenshots/mobile-light/mobile-light-calendar.png b/docs/screenshots/mobile-light/mobile-light-calendar.png
deleted file mode 100644
index 2564ec1..0000000
Binary files a/docs/screenshots/mobile-light/mobile-light-calendar.png and /dev/null differ
diff --git a/docs/screenshots/mobile-light/mobile-light-contacts-2.png b/docs/screenshots/mobile-light/mobile-light-contacts-2.png
deleted file mode 100644
index 36ba19e..0000000
Binary files a/docs/screenshots/mobile-light/mobile-light-contacts-2.png and /dev/null differ
diff --git a/docs/screenshots/mobile-light/mobile-light-dashboard-2.png b/docs/screenshots/mobile-light/mobile-light-dashboard-2.png
deleted file mode 100644
index 865ff5c..0000000
Binary files a/docs/screenshots/mobile-light/mobile-light-dashboard-2.png and /dev/null differ
diff --git a/docs/screenshots/mobile-light/mobile-light-meal.png b/docs/screenshots/mobile-light/mobile-light-meal.png
deleted file mode 100644
index cfaa7d5..0000000
Binary files a/docs/screenshots/mobile-light/mobile-light-meal.png and /dev/null differ
diff --git a/docs/screenshots/mobile-light/mobile-light-notes-2.png b/docs/screenshots/mobile-light/mobile-light-notes-2.png
deleted file mode 100644
index 14fcd54..0000000
Binary files a/docs/screenshots/mobile-light/mobile-light-notes-2.png and /dev/null differ
diff --git a/docs/screenshots/mobile-light/mobile-light-settings.png b/docs/screenshots/mobile-light/mobile-light-settings.png
deleted file mode 100644
index 8e6274c..0000000
Binary files a/docs/screenshots/mobile-light/mobile-light-settings.png and /dev/null differ
diff --git a/docs/screenshots/mobile-light/mobile-light-shopping.png b/docs/screenshots/mobile-light/mobile-light-shopping.png
deleted file mode 100644
index d2dd32a..0000000
Binary files a/docs/screenshots/mobile-light/mobile-light-shopping.png and /dev/null differ
diff --git a/docs/screenshots/mobile-light/mobile-light-tasks-2.png b/docs/screenshots/mobile-light/mobile-light-tasks-2.png
deleted file mode 100644
index b0b9252..0000000
Binary files a/docs/screenshots/mobile-light/mobile-light-tasks-2.png and /dev/null differ
diff --git a/docs/screenshots/tablet-dark/tablet-dark-budget-2.png b/docs/screenshots/tablet-dark/tablet-dark-budget-2.png
deleted file mode 100644
index a8940be..0000000
Binary files a/docs/screenshots/tablet-dark/tablet-dark-budget-2.png and /dev/null differ
diff --git a/docs/screenshots/tablet-dark/tablet-dark-calendar.png b/docs/screenshots/tablet-dark/tablet-dark-calendar.png
deleted file mode 100644
index cb98eda..0000000
Binary files a/docs/screenshots/tablet-dark/tablet-dark-calendar.png and /dev/null differ
diff --git a/docs/screenshots/tablet-dark/tablet-dark-contacts-2.png b/docs/screenshots/tablet-dark/tablet-dark-contacts-2.png
deleted file mode 100644
index d5af9fe..0000000
Binary files a/docs/screenshots/tablet-dark/tablet-dark-contacts-2.png and /dev/null differ
diff --git a/docs/screenshots/tablet-dark/tablet-dark-dashboard-2.png b/docs/screenshots/tablet-dark/tablet-dark-dashboard-2.png
deleted file mode 100644
index d6da602..0000000
Binary files a/docs/screenshots/tablet-dark/tablet-dark-dashboard-2.png and /dev/null differ
diff --git a/docs/screenshots/tablet-dark/tablet-dark-meal.png b/docs/screenshots/tablet-dark/tablet-dark-meal.png
deleted file mode 100644
index 77ba4eb..0000000
Binary files a/docs/screenshots/tablet-dark/tablet-dark-meal.png and /dev/null differ
diff --git a/docs/screenshots/tablet-dark/tablet-dark-notes-2.png b/docs/screenshots/tablet-dark/tablet-dark-notes-2.png
deleted file mode 100644
index 3b10571..0000000
Binary files a/docs/screenshots/tablet-dark/tablet-dark-notes-2.png and /dev/null differ
diff --git a/docs/screenshots/tablet-dark/tablet-dark-settings.png b/docs/screenshots/tablet-dark/tablet-dark-settings.png
deleted file mode 100644
index de7d8de..0000000
Binary files a/docs/screenshots/tablet-dark/tablet-dark-settings.png and /dev/null differ
diff --git a/docs/screenshots/tablet-dark/tablet-dark-shopping.png b/docs/screenshots/tablet-dark/tablet-dark-shopping.png
deleted file mode 100644
index 085dc55..0000000
Binary files a/docs/screenshots/tablet-dark/tablet-dark-shopping.png and /dev/null differ
diff --git a/docs/screenshots/tablet-dark/tablet-dark-tasks-2.png b/docs/screenshots/tablet-dark/tablet-dark-tasks-2.png
deleted file mode 100644
index 58d589d..0000000
Binary files a/docs/screenshots/tablet-dark/tablet-dark-tasks-2.png and /dev/null differ
diff --git a/docs/screenshots/tablet-light/tablet-light-budget-2.png b/docs/screenshots/tablet-light/tablet-light-budget-2.png
deleted file mode 100644
index 331b004..0000000
Binary files a/docs/screenshots/tablet-light/tablet-light-budget-2.png and /dev/null differ
diff --git a/docs/screenshots/tablet-light/tablet-light-calendar.png b/docs/screenshots/tablet-light/tablet-light-calendar.png
deleted file mode 100644
index f51becc..0000000
Binary files a/docs/screenshots/tablet-light/tablet-light-calendar.png and /dev/null differ
diff --git a/docs/screenshots/tablet-light/tablet-light-contacts-2.png b/docs/screenshots/tablet-light/tablet-light-contacts-2.png
deleted file mode 100644
index 7775cf4..0000000
Binary files a/docs/screenshots/tablet-light/tablet-light-contacts-2.png and /dev/null differ
diff --git a/docs/screenshots/tablet-light/tablet-light-dashboard-2.png b/docs/screenshots/tablet-light/tablet-light-dashboard-2.png
deleted file mode 100644
index e0e8de0..0000000
Binary files a/docs/screenshots/tablet-light/tablet-light-dashboard-2.png and /dev/null differ
diff --git a/docs/screenshots/tablet-light/tablet-light-meal.png b/docs/screenshots/tablet-light/tablet-light-meal.png
deleted file mode 100644
index 12e4460..0000000
Binary files a/docs/screenshots/tablet-light/tablet-light-meal.png and /dev/null differ
diff --git a/docs/screenshots/tablet-light/tablet-light-notes-2.png b/docs/screenshots/tablet-light/tablet-light-notes-2.png
deleted file mode 100644
index 4554e20..0000000
Binary files a/docs/screenshots/tablet-light/tablet-light-notes-2.png and /dev/null differ
diff --git a/docs/screenshots/tablet-light/tablet-light-settings.png b/docs/screenshots/tablet-light/tablet-light-settings.png
deleted file mode 100644
index 4bbdc1c..0000000
Binary files a/docs/screenshots/tablet-light/tablet-light-settings.png and /dev/null differ
diff --git a/docs/screenshots/tablet-light/tablet-light-shopping.png b/docs/screenshots/tablet-light/tablet-light-shopping.png
deleted file mode 100644
index 1d71e37..0000000
Binary files a/docs/screenshots/tablet-light/tablet-light-shopping.png and /dev/null differ
diff --git a/docs/screenshots/tablet-light/tablet-light-tasks-2.png b/docs/screenshots/tablet-light/tablet-light-tasks-2.png
deleted file mode 100644
index 5276744..0000000
Binary files a/docs/screenshots/tablet-light/tablet-light-tasks-2.png and /dev/null differ
diff --git a/docs/social-preview.png b/docs/social-preview.png
index d7e3883..077c644 100644
Binary files a/docs/social-preview.png and b/docs/social-preview.png differ
diff --git a/docs/twitter-image.png b/docs/twitter-image.png
index 0b00781..8a47826 100644
Binary files a/docs/twitter-image.png and b/docs/twitter-image.png differ
diff --git a/tools/generate-social-images.js b/tools/generate-social-images.js
new file mode 100644
index 0000000..7a61cd6
--- /dev/null
+++ b/tools/generate-social-images.js
@@ -0,0 +1,120 @@
+#!/usr/bin/env node
+import sharp from 'sharp';
+import { readFileSync } from 'fs';
+
+const SCREENSHOT = 'docs/screenshots/01-web-light.png';
+const BG_COLOR = '#1A1A28';
+
+// Social image dimensions
+const DIMENSIONS = {
+ 'og-image.png': { width: 1200, height: 630 },
+ 'twitter-image.png': { width: 1200, height: 675 },
+ 'social-preview.png': { width: 1280, height: 640 }
+};
+
+async function createSocialImage(filename, width, height) {
+ // Load and resize screenshot to fit right side (60% of width)
+ const screenshotWidth = Math.floor(width * 0.55);
+ const screenshotHeight = Math.floor(height * 0.7);
+
+ const screenshot = await sharp(SCREENSHOT)
+ .resize(screenshotWidth, screenshotHeight, {
+ fit: 'contain',
+ background: { r: 0, g: 0, b: 0, alpha: 0 }
+ })
+ .toBuffer();
+
+ // Create SVG with text and layout
+ const svg = `
+
+ `;
+
+ // Position screenshot on the right side
+ const screenshotX = width - screenshotWidth - 40;
+ const screenshotY = Math.floor((height - screenshotHeight) / 2);
+
+ // Composite everything together
+ const image = await sharp({
+ create: {
+ width,
+ height,
+ channels: 4,
+ background: BG_COLOR
+ }
+ })
+ .composite([
+ {
+ input: Buffer.from(svg),
+ top: 0,
+ left: 0
+ },
+ {
+ input: screenshot,
+ top: screenshotY,
+ left: screenshotX
+ }
+ ])
+ .png()
+ .toFile(`docs/${filename}`);
+
+ console.log(`✓ Created docs/${filename} (${width}x${height})`);
+}
+
+async function main() {
+ console.log('Generating social preview images...\n');
+
+ for (const [filename, { width, height }] of Object.entries(DIMENSIONS)) {
+ await createSocialImage(filename, width, height);
+ }
+
+ console.log('\n✓ All social images generated successfully!');
+}
+
+main().catch(err => {
+ console.error('Error:', err.message);
+ process.exit(1);
+});