For now? I'm experimenting on an old concept.
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

meta: Move rationale into notes and update notes structure

+68 -87
-55
WHY.md
··· 1 - # Why 2 - 3 - > This file aims to explain my choices. Not that I need to explain myself 4 - > but hey, we all feel accountable for our stupid actions sometimes. 5 - 6 - ## The 25 branch 7 - 8 - Few days after the Rust 2024 edition release, having new experiences with gleam Lustre and a really messy repository... 9 - Three great reasons for a clean slate. 10 - Git branch 25 is yet another restart for me writing on Lumina. With experiences and a clear vision, `master` does a 11 - good job, so this one will do even better. 12 - 13 - ### Choices made 14 - 15 - - **Gleam** as the main language on frontend. 16 - Not having multiple language branches about this. 17 - - **TailwindCSS** as the main CSS framework. 18 - - **Lustre** for building the UI. 19 - - **Rust** as the main language on backend. 20 - - More specifically, the `rocket` library instead of `actix-web`. 21 - - Rust 2024 edition from the start. 22 - - **PostgreSQL** as the main database. **SQLite** for testing. 23 - - **WebSockets** for real-time communication between the client and the server. 24 - 25 - ## The `gleam` language 26 - 27 - I am a big fan of the language. I think it's a great language for 28 - writing maintainable and scalable code. I think it's a great language 29 - for writing maintainable and scalable code. It's simplicity and the 30 - young yet strong community set a good foundation for Lumina. 31 - 32 - ## Timeline-carries-most 33 - 34 - One of the bussiest tables you'll see is the timeline, containing just some ID's and timestamps. 35 - 36 - | Kind | timeline ID | item ID | Timestamp | 37 - | ---------------------------------------- | ----------- | ------- | ------------------ | 38 - | `'USER'`, `'DIRECT'`, `'TL'`, `'BUBBLE'` | uuidv4 | uuidv4 | Database timestamp | 39 - 40 - The `global` timeline, here being `00000000-0000-0000-0000-000000000000` as the only constant-assigned timeline ID. The 41 - user-profiles being the same as their user id counterpart. 42 - 43 - This is too vague to actually be able to pull a post, which is why the item forward table exists, combining a UUID and a 44 - string to forward to the right item. 45 - 46 - Now I say `item`, not `post` here. This because you might expect only timelines (global, userprofiles) and bubbles ( 47 - timelines meant for a specific subject, forming a community within the larger site) in this table, but direct message 48 - threads are actually also saved here. 49 - 50 - This means this table might become a little overcrowded, and optimizations such as caching, sharding and mirrorring to 51 - Redis will be needed to keep it somewhat performant, especially since this is essentially a constant hot path. I am 52 - aware. 53 - 54 - Which is why we also would need to log every timeline request to be able to identify for example overrequested 55 - timelines.
+32 -32
notes/.obsidian/core-plugins.json
··· 1 1 { 2 - "file-explorer": true, 3 - "global-search": true, 4 - "switcher": true, 5 - "graph": true, 6 - "backlink": true, 7 - "canvas": true, 8 - "outgoing-link": true, 9 - "tag-pane": true, 10 - "footnotes": true, 11 - "properties": false, 12 - "page-preview": true, 13 - "daily-notes": true, 14 - "templates": true, 15 - "note-composer": true, 16 - "command-palette": true, 17 - "slash-command": false, 18 - "editor-status": true, 19 - "bookmarks": true, 20 - "markdown-importer": false, 21 - "zk-prefixer": true, 22 - "random-note": false, 23 - "outline": true, 24 - "word-count": true, 25 - "slides": false, 26 - "audio-recorder": false, 27 - "workspaces": false, 28 - "file-recovery": true, 29 - "publish": false, 30 - "sync": false, 31 - "bases": true, 32 - "webviewer": false 33 - } 2 + "file-explorer": true, 3 + "global-search": true, 4 + "switcher": true, 5 + "graph": true, 6 + "backlink": true, 7 + "canvas": true, 8 + "outgoing-link": true, 9 + "tag-pane": true, 10 + "footnotes": true, 11 + "properties": false, 12 + "page-preview": true, 13 + "daily-notes": true, 14 + "templates": true, 15 + "note-composer": true, 16 + "command-palette": true, 17 + "slash-command": false, 18 + "editor-status": true, 19 + "bookmarks": true, 20 + "markdown-importer": false, 21 + "zk-prefixer": true, 22 + "random-note": false, 23 + "outline": true, 24 + "word-count": true, 25 + "slides": false, 26 + "audio-recorder": false, 27 + "workspaces": false, 28 + "file-recovery": true, 29 + "publish": false, 30 + "sync": false, 31 + "bases": true, 32 + "webviewer": false 33 + }
notes/Approaches/Future concepts/Push notifications/push notification resolve links.md notes/Design choices/Future concepts/Push notifications/push notification resolve links.md
+1
notes/Design choices/Philosophies/Frontend > Non-minimalist design.md
··· 1 + Lumina is not minimalistic. It follows web design trends from decades ago with that approach, but also prefers a clean and modern design. This is why coloured elements are very important, but it also allows us to implement features considered old-school nowadays. Like the ability
+25
notes/Design choices/Rationale/Backend > Timeline carries most.md
··· 1 + # Timeline-carries-most 2 + [['Timeline carries most' and the database]] 3 + 4 + One of the busiest tables you'll see is the timeline, containing just some ID's and timestamps. 5 + 6 + | Kind | timeline ID | item ID | Timestamp | 7 + | ---------------------------------------- | ----------- | ------- | ------------------ | 8 + | `'USER'`, `'DIRECT'`, `'TL'`, `'BUBBLE'` | uuidv4 | uuidv4 | Database timestamp | 9 + 10 + The `global` timeline, here being `00000000-0000-0000-0000-000000000000` as the only constant-assigned timeline ID. The 11 + user-profiles being the same as their user id counterpart. 12 + 13 + This is too vague to actually be able to pull a post, which is why the item forward table exists, combining a UUID and a 14 + string to forward to the right item. 15 + 16 + Now I say `item`, not `post` here. This because you might expect only timelines (global, userprofiles) and bubbles ( 17 + timelines meant for a specific subject, forming a community within the larger site) in this table, but direct message 18 + threads are actually also saved here. 19 + 20 + This means this table might become a little overcrowded, and optimizations such as caching, sharding and mirrorring to 21 + Redis will be needed to keep it somewhat performant, especially since this is essentially a constant hot path. I am 22 + aware. 23 + 24 + Which is why we also would need to log every timeline request to be able to identify for example over-requested 25 + timelines.
+6
notes/Design choices/Rationale/Web client > Gleam language.md
··· 1 + # The `gleam` language 2 + 3 + I am a big fan of the language. I think it's a great language for 4 + writing maintainable and scalable code. I think it's a great language 5 + for writing maintainable and scalable code. It's simplicity and the 6 + young yet strong community set a good foundation for Lumina.
+4
notes/Philosophies/'Timeline carries most' and the database.md notes/Design choices/Philosophies/'Timeline carries most' and the database.md
··· 1 + Rationale: [[Backend > Timeline carries most]] 1 2 # Lumina Data Storage Architecture 2 3 3 4 This document outlines the data storage architecture of the Lumina social platform, based on the existing implementation 4 5 and design principles. 6 + 7 + 5 8 6 9 ## Core Philosophy: "Timeline-carries-most" 7 10 ··· 11 14 12 15 - It acts as an index, containing only a timeline ID (`tlid`), an item ID (`item_id`), and a `timestamp`. 13 16 - It does not store any content itself, only the relationship between a timeline and an item. 17 + 14 18 15 19 ## Database System 16 20