Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
231c6f8
chore: removed unused toast in app
Profiidev Jun 9, 2026
986fc17
feat: added tiptap toolbar components
Profiidev Jun 9, 2026
d3831a6
fix: type errors
Profiidev Jun 9, 2026
e86807a
feat: made initial text editor working
Profiidev Jun 9, 2026
7585d9e
chore: fix format
Profiidev Jun 9, 2026
5b95811
fix: tiptap reactivity
Profiidev Jun 9, 2026
4ee1ad1
refactor: better toolbar styling
Profiidev Jun 9, 2026
1f2d457
feat: added regex search
Profiidev Jun 9, 2026
54c9d1b
refactor: removed unused tiptap extensions
Profiidev Jun 9, 2026
be50489
fix: mubile toolbar
Profiidev Jun 10, 2026
3dbb817
feat: added sync setup to frontend
Profiidev Jun 10, 2026
4bd9551
feat: added migrations for notes
Profiidev Jun 11, 2026
da3c9fe
feat: added db functions for notes
Profiidev Jun 11, 2026
dba86ea
feat: added note managment endpoints
Profiidev Jun 11, 2026
372ad2d
chore: fix code style issues with clippy, oxfmt
profidev-commit-bot[bot] Jun 11, 2026
450e00c
feat: added websocket updates for notes metadata
Profiidev Jun 11, 2026
4463be1
feat: added notes create page
Profiidev Jun 11, 2026
c9c5ed0
feat: added notes list page
Profiidev Jun 11, 2026
afe66bb
feat: added basic notes details page for metadata
Profiidev Jun 11, 2026
4caad3e
style: better notes layout
Profiidev Jun 11, 2026
7b81231
feat: added websocket for note editor sync
Profiidev Jun 11, 2026
189873c
feat: propper user sync for live editing
Profiidev Jun 11, 2026
6fed9b0
fix: types
Profiidev Jun 11, 2026
d7a4f12
style: better style for notes editor
Profiidev Jun 12, 2026
67361b9
fix: remove user cursor on page reload
Profiidev Jun 12, 2026
9e71fa8
fix: show correct username for notes cursor
Profiidev Jun 12, 2026
59c79ff
fix: undo redo plugin
Profiidev Jun 12, 2026
74fd12d
fix: save doc event without websocket disconnect to prevent data loss
Profiidev Jun 12, 2026
66c9cd0
fix: limit doc size
Profiidev Jun 12, 2026
b8ad61a
feat: added notes preview
Profiidev Jun 12, 2026
5938a9a
chore: fix code style issues with oxfmt
profidev-commit-bot[bot] Jun 12, 2026
b573559
refactor: remove custom mobile menu for editor toolbar
Profiidev Jun 12, 2026
562ecde
style: better overflow handling for editor toolbar
Profiidev Jun 12, 2026
0996acc
refactor: correct component import
Profiidev Jun 12, 2026
cdcfb7d
chore: fix code style issues with oxlint, oxfmt
profidev-commit-bot[bot] Jun 12, 2026
d9e0ad1
fix: support whitespace only search and replace
Profiidev Jun 12, 2026
0ecb6b4
refactor: better user avatar
Profiidev Jun 12, 2026
7bf7c3d
style: better shared button for notes
Profiidev Jun 13, 2026
45eee6e
feat: added list of currently editing users
Profiidev Jun 13, 2026
d7b025b
chore: fix code style issues with oxfmt
profidev-commit-bot[bot] Jun 13, 2026
43e8fd3
style: better mobile notes header layout
Profiidev Jun 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"tauri": "tauri"
},
"dependencies": {
"@profidev/pleiades": "^1.9.6",
"@profidev/pleiades": "1.9.7",
"@sveltejs/enhanced-img": "0.10.4",
"@tauri-apps/api": "^2",
"@tauri-apps/plugin-barcode-scanner": "^2.4.5",
Expand Down
1 change: 0 additions & 1 deletion app/src/routes/scan/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
const result = await scan({ formats: [Format.QRCode], windowed: true });
const url = new URL(result.content);
const code = url.searchParams.get('code');
toast.success(`Scanned code: ${code}`);
goto(`/login?code=${code}`);
} catch {
toast.error('Failed to scan QR code');
Expand Down
8 changes: 1 addition & 7 deletions app/src/routes/setup/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,4 @@
};
</script>

<MultistepForm
cancelHref="/"
{stages}
{onsubmit}
submitLabel="Confirm"
submitIcon={Check}
/>
<MultistepForm {stages} {onsubmit} submitLabel="Confirm" submitIcon={Check} />
1 change: 1 addition & 0 deletions backend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,4 @@ url = { version = "2.5.8", features = ["serde"] }
uuid = "1.23.1"
webauthn-rs = { version = "0.5.5", features = ["conditional-ui"] }
webauthn-rs-proto = "0.5.5"
yrs = { version = "0.27.0", features = ["sync"] }
2 changes: 2 additions & 0 deletions backend/entity/src/entities/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ pub mod group_permission;
pub mod group_user;
pub mod invalid_jwt;
pub mod key;
pub mod note;
pub mod note_user;
pub mod o_auth_client;
pub mod o_auth_client_additional_redirect_uri;
pub mod o_auth_client_group;
Expand Down
46 changes: 46 additions & 0 deletions backend/entity/src/entities/note.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.19

use sea_orm::entity::prelude::*;

#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note")]
pub struct Model {
#[sea_orm(primary_key, auto_increment = false)]
pub id: Uuid,
pub title: String,
#[sea_orm(column_type = "VarBinary(StringLen::None)")]
pub content: Vec<u8>,
pub preview: String,
pub owner: Uuid,
}

#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {
#[sea_orm(has_many = "super::note_user::Entity")]
NoteUser,
#[sea_orm(
belongs_to = "super::user::Entity",
from = "Column::Owner",
to = "super::user::Column::Id",
on_update = "Cascade",
on_delete = "Cascade"
)]
User,
}

impl Related<super::note_user::Entity> for Entity {
fn to() -> RelationDef {
Relation::NoteUser.def()
}
}

impl Related<super::user::Entity> for Entity {
fn to() -> RelationDef {
super::note_user::Relation::User.def()
}
fn via() -> Option<RelationDef> {
Some(super::note_user::Relation::Note.def().rev())
}
}

impl ActiveModelBehavior for ActiveModel {}
46 changes: 46 additions & 0 deletions backend/entity/src/entities/note_user.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.19

use sea_orm::entity::prelude::*;

#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note_user")]
pub struct Model {
#[sea_orm(primary_key, auto_increment = false)]
pub note: Uuid,
#[sea_orm(primary_key, auto_increment = false)]
pub user: Uuid,
}

#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {
#[sea_orm(
belongs_to = "super::note::Entity",
from = "Column::Note",
to = "super::note::Column::Id",
on_update = "Cascade",
on_delete = "Cascade"
)]
Note,
#[sea_orm(
belongs_to = "super::user::Entity",
from = "Column::User",
to = "super::user::Column::Id",
on_update = "Cascade",
on_delete = "Cascade"
)]
User,
}

impl Related<super::note::Entity> for Entity {
fn to() -> RelationDef {
Relation::Note.def()
}
}

impl Related<super::user::Entity> for Entity {
fn to() -> RelationDef {
Relation::User.def()
}
}

impl ActiveModelBehavior for ActiveModel {}
2 changes: 2 additions & 0 deletions backend/entity/src/entities/prelude.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ pub use super::group_permission::Entity as GroupPermission;
pub use super::group_user::Entity as GroupUser;
pub use super::invalid_jwt::Entity as InvalidJwt;
pub use super::key::Entity as Key;
pub use super::note::Entity as Note;
pub use super::note_user::Entity as NoteUser;
pub use super::o_auth_client::Entity as OAuthClient;
pub use super::o_auth_client_additional_redirect_uri::Entity as OAuthClientAdditionalRedirectUri;
pub use super::o_auth_client_group::Entity as OAuthClientGroup;
Expand Down
19 changes: 19 additions & 0 deletions backend/entity/src/entities/user.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ pub enum Relation {
Apod,
#[sea_orm(has_many = "super::group_user::Entity")]
GroupUser,
#[sea_orm(has_many = "super::note::Entity")]
Note,
#[sea_orm(has_many = "super::note_user::Entity")]
NoteUser,
#[sea_orm(has_many = "super::o_auth_client_user::Entity")]
OAuthClientUser,
#[sea_orm(has_many = "super::passkey::Entity")]
Expand All @@ -44,6 +48,12 @@ impl Related<super::group_user::Entity> for Entity {
}
}

impl Related<super::note_user::Entity> for Entity {
fn to() -> RelationDef {
Relation::NoteUser.def()
}
}

impl Related<super::o_auth_client_user::Entity> for Entity {
fn to() -> RelationDef {
Relation::OAuthClientUser.def()
Expand Down Expand Up @@ -77,6 +87,15 @@ impl Related<super::group::Entity> for Entity {
}
}

impl Related<super::note::Entity> for Entity {
fn to() -> RelationDef {
super::note_user::Relation::Note.def()
}
fn via() -> Option<RelationDef> {
Some(super::note_user::Relation::User.def().rev())
}
}

impl Related<super::o_auth_client::Entity> for Entity {
fn to() -> RelationDef {
super::o_auth_client_user::Relation::OAuthClient.def()
Expand Down
2 changes: 2 additions & 0 deletions backend/migration/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ mod m20250412_072549_add_oauth_confidential;
mod m20250415_162623_user_settings;
mod m20260507_102052_user_ext;
mod m20260605_071137_oauth_client_pkce;
mod m20260611_120000_create_note_table;

pub struct Migrator;

Expand All @@ -31,6 +32,7 @@ impl MigratorTrait for Migrator {
Box::new(m20250415_162623_user_settings::Migration),
Box::new(m20260507_102052_user_ext::Migration),
Box::new(m20260605_071137_oauth_client_pkce::Migration),
Box::new(m20260611_120000_create_note_table::Migration),
]
}
}
90 changes: 90 additions & 0 deletions backend/migration/src/m20260611_120000_create_note_table.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
use centaurus::db::migrations::m3_user::User;
use sea_orm_migration::{prelude::*, schema::*};

#[derive(DeriveMigrationName)]
pub struct Migration;

#[async_trait::async_trait]
impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.create_table(
Table::create()
.table(Note::Table)
.if_not_exists()
.col(pk_uuid(Note::Id))
.col(string(Note::Title))
.col(binary(Note::Content))
.col(string(Note::Preview))
.col(uuid(Note::Owner))
.foreign_key(
ForeignKey::create()
.from(Note::Table, Note::Owner)
.to(User::Table, User::Id)
.on_delete(ForeignKeyAction::Cascade)
.on_update(ForeignKeyAction::Cascade),
)
.to_owned(),
)
.await?;

manager
.create_table(
Table::create()
.table(NoteUser::Table)
.if_not_exists()
.primary_key(
Index::create()
.table(NoteUser::Table)
.col(NoteUser::Note)
.col(NoteUser::User),
)
.col(uuid(NoteUser::Note))
.col(uuid(NoteUser::User))
.foreign_key(
ForeignKey::create()
.from(NoteUser::Table, NoteUser::Note)
.to(Note::Table, Note::Id)
.on_delete(ForeignKeyAction::Cascade)
.on_update(ForeignKeyAction::Cascade),
)
.foreign_key(
ForeignKey::create()
.from(NoteUser::Table, NoteUser::User)
.to(User::Table, User::Id)
.on_delete(ForeignKeyAction::Cascade)
.on_update(ForeignKeyAction::Cascade),
)
.to_owned(),
)
.await
}

async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.drop_table(
Table::drop()
.table(NoteUser::Table)
.table(Note::Table)
.to_owned(),
)
.await
}
}

#[derive(DeriveIden)]
enum Note {
Table,
Id,
Title,
Content,
Preview,
Owner,
}

#[derive(DeriveIden)]
enum NoteUser {
Table,
Note,
User,
}
7 changes: 7 additions & 0 deletions backend/src/db/mod.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use centaurus::db::init::Connection;
use notes::NoteTable;
use oauth::{
oauth_client::OauthClientTable, oauth_policy::OAuthPolicyTable, oauth_scope::OAuthScopeTable,
};
Expand All @@ -7,6 +8,7 @@ use user::{passkey::PasskeyTable, settings::SettingsTable};

use crate::db::user::user_ext::UserExtTable;

pub mod notes;
pub mod oauth;
pub mod services;
pub mod user;
Expand All @@ -19,6 +21,7 @@ pub trait DBTrait {
fn oauth_scope(&self) -> OAuthScopeTable<'_>;
fn apod(&self) -> ApodTable<'_>;
fn settings(&self) -> SettingsTable<'_>;
fn notes(&self) -> NoteTable<'_>;
}

impl DBTrait for Connection {
Expand Down Expand Up @@ -49,4 +52,8 @@ impl DBTrait for Connection {
fn settings(&self) -> SettingsTable<'_> {
SettingsTable::new(&self.0)
}

fn notes(&self) -> NoteTable<'_> {
NoteTable::new(&self.0)
}
}
Loading
Loading