---
# System prepended metadata

title: Xicsh

---

# Xicsh
BBS, BBC

## Technocol kupac Kupac
- Rust hátvég
    - Axum (HTTP)
    - SQLx + PostgreSQl
        - Non orm, just a library
- Frontend?
    - na ez a jo kerdes
    - Rust TUI
        - TUI-rs
        - crossterm backend
- When
    - Now

## Scope
- Basic account
    - Username 
    - Master password
    - Master password sha256 encrpytion key

- Whole thing is persistent on the server
- Chat room
    - dm - 1 to 1
    - Text based messages
    - emoji based react somehow
    - reply
- E2E Encrypted
    - Nem signal protocol
    - chat rooms used shared key
    - shared key is encrypted for each user
    - each user unlocks this key with their master password
    - AES
- Client
    - client saves session
    - .toml, 
    - configs maybe
    - client isnt aware of a xicsh server
    - server isnt aware of any specific client impl.
        - Rest, API
        - Websockets

- names are from dune mf
    - https://dune.fandom.com/wiki/Dune_Wiki

## Eposzok
- kazánlemez kazánlemez
    - server
        - postgre as well
    - client
    - sharing types
        - rust lib
    - just command runner
    - toml everywhere
    - SemVer
    - PR-ek
    - toplvl
        - readme
        - contributing
        - license
        - project lvl justfile
        - subfolders
            - core
                - server - caladan
                - tclient - sayyadina
            - docs - mdbook
    - Alfeladatok
        - Axum server with postgres and sqlx - COMPLETED
        - Client with tui
            - Include clap as well
            - include toml config file support
            - big todo screen for normal client mode
        - Shared types crate - COMPLETED
        - Commitizen setup
        - CI x 3 - COMPLETED
            - test
            - fmt check
            - clippy check
        - Copy scope to book
        - Fix CI with SQLx

- User management
    - Caladan:
        - Register
            - also gives token
            - username
            - password
        - Login
            - gives single long lived token
            - persisted locally by sayyadina
        - Test token endpoint
            - sayyadina can call this before going for the ui as a sanity check
    - Sayyadina
        - Basic user management
            - check user creds in local storage
        - Register screen
        - Login screen

    - Caladan
        - Channel
            - Channel has name, by default its partici username
            - users in chan
            - everyone can add, just quit or dont trust if u dont like it lmao
            - Everything is RSA
            - Join channel button
                - Shared secret showing
                - both enter it,
                - reveals a list of waiting parties
                - host can accept them
                - shows username, and public key fingerprint
        - everyone just has a public key lmao
        - Sending message:
            - you can just easily get all the public keys for everyone in the channel
        - somehow trust things
            - client has a trusted hashsum of all participant public keys
            - this will be prompted to be updated when it doesnt match whats expected
            - user cant send message untill this is trusted
        - REALMS:
            - channel
                - channel management
                - renaming
                - creating
                - connection is a sub part
            - tcon
                - puts users in channels
                - manages re trusting process
            - keyring
                - key management
                - user get decrpytion key for themselves based on master_key
            - messaging
                - actually sending messages
                - reacting is special kind of message maybe
                - images are idfk
                - paginated list of all encrpyted messages in a chan

        - All of this with shared client library?
            - Has a generic api backend
            - Has a generic storage backend kekw
        - And maybe dumb integration test client? kekw