Code Monkey home page Code Monkey logo

loremaster's Introduction

Hello

๐ŸŒฑ Iโ€™m currently learning:

๐Ÿ”ญ Iโ€™m currently working on:

  • Building a web application with Rust

loremaster's People

Contributors

dependabot[bot] avatar seanpmyers avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

loremaster's Issues

Design System

Design System

Description

The rules used to guide all design in the application.

Mostly focused on the web design for now.

TODO

  • Determine what components will be included
  • Pick out fonts
  • Determine color schemes
  • Research best practices for design systems

Document User Interface - Chronicle View

Document User Interface - Chronicle View

Context

For version 1 of the product, I'm thinking the chronicle view will be the main functionality available to users.

User Interface Options

User Interface Options

Context

A user interface is needed. There are some new ways to build web apps using Rust and WebAssembly that would remove the need to directly write JavaScript, which I would personally prefer.

Options

Currently the plan is to implement a web interface using one of the following Rust web front-end frameworks:

Tasks

  • Pick a framework
  • Implement the core features for a minimum viable product

Chronicle Front-end -- Show the date and greeting

Chronicle Front-end -- Show the date and greeting

Assumptions

  • The back-end API call exists and returns the required data

Requirements

  • Display the user's local date and time
  • Display a greeting message
  • Display the user's alias if it exists or the word 'stranger' if the user is not logged in or the alias does not exist
  • The client should make an API call to the back-end using the client's local date to retrieve the related chronicle data

Refactor Chrono Dependency/Crate

The chrono crate has a vulnerability listed below:

Crate:         chrono
Version:       0.4.19
Title:         Potential segfault in `localtime_r` invocations
Date:          2020-11-10
ID:            RUSTSEC-2020-0159
URL:           https://rustsec.org/advisories/RUSTSEC-2020-0159
Solution:      No safe upgrade is available!

I've read that it will most likely not be resolved soon, and therefore it should be replaced and any related functionality should be refactored.

Alternatives to chrono:

Feature List

Feature List

Context

I think it would be good to write out all the features of the application.

Feature in this context means something along the lines of "distinguishing characteristic of a software item (e.g., performance, portability, or functionality)".

Benefits

  • Could be used for user feedback.
    • When reviewing a feature, or submitting issue/bug reports, having a specific feature to references would be helpful.
    • User interface elements could also be marked and mapped to specific features, so users would not have to figure it out on their own.
  • Enhance progress tracking of development/work.
  • Improve the application's marketability

Implementation

  • Store in database?
    • Might be necessary if the desired usage is to programmatically match features to UI elements or user feedback.
  • Store in documentation?
    • Makes it easier to document the details of the feature
      • This could be solved by having the details stored in the database be in the same format as the documentation (markdown?)
  • Definition?
    • What makes something a feature?
    • Should features be grouped or categorized?

Create Registration User Interface

Create Registration User Interface

Context

Any person that wants to use the application must first register themselves with the application's database.
In order for them to do that, they need a user interface to interact with the application.

Essentials

The user interface must be able to collect the following information from the user:

  • The person's email address -- this is their primary form of identity
  • A password -- this is a secret shared between the user and the application, used by the user to prove to the application they are who they claim to be.

Optional

  • An alias -- the user may wish to be greeted by the application using a certain alias. They don't have to provide this though.

Tasks

  • Design the interface
  • Code the interface
  • Test the interface

Add option to authenticate through Fast IDentity Online (fido2)/Client to authenticator protocol (CTAP) 2

Authentication via Fast IDentity Online client to authenticator protocol (fido2/CTAP) 2

Context

Users have to authenticate their identity with the server before they are able to start accessing their account.
fido2 has the client to authenticator protocol (CTAP) which allows the use of a cryptographic authenticator (such as a smartphone or a hardware security key) as a form of identity verification.

I personally have a YubiKey so I would like to try using it to authenticate myself as well.

Resources

Implementation

Will almost certainly use an external library for the main implementation of CTAP.
Learning how to implement this protocol is outside the scope of this project.

Options

I saw a couple crates that might be usable for this functionality within loremaster.

Chronicle Back-end API -- Current Chronicle By Date

Chronicle Back-end API -- Current Chronicle By Date

Assumptions

  • The user is logged in
  • The client makes this call and has the required input data

Requirements

  • Back-end returns the current chronicle for a user given a local date time value
  • OpenAPI document defining the endpoint for this request

Suggestion: take a look at Org Mode?

Hey, this looks like a really cool project, and your roadmap for it looks fantastic! It might be worth taking a look at Emacs' Org Mode, if you haven't already, with regards to keyboard shortcuts and linking support. Org Roam in particular is a system that allows one to create a Zettelkasten in plaintext markup files that can link to each other, with each file (and/or heading therein) having arbitrary properties, like IDs. A similar system could be very powerful in this app, especially for your stated goal of supporting personal wikis. Particularly, I think a lot of prospective users might value an arbitrary properties system on whatever your equivalent of headings ends up being (e.g. the same as Org, being headings in files, or perhaps files alone, with some kind of Xanadu-like transclusion system), which would allow node IDs to be exposed to users for building their own extensions on top of your app. For instance, I've built a system on top of Org Roam for myself that lets me link nodes together with uplinks (links to nodes that might inform this node) and downlinks (links to nodes that this node might inform), which allows a more fine-grained linking system. Rather than building that kind of very specific feature yourself, it might be a good idea to support user-accessible and visible metadata for 'power users' to create their own custom workflows. (I see from #71 that this kind of thing is possibly already in your mind.)

Again, these are all just suggestions, so please feel free to utterly disregard everything I've just said! Hopefully some of it will be useful to you though! (Feel free to close this issue whenever you like.)

Side note: as the maintainer of Perseus, I'm very happy to help with any issues you may have on that front!

Session Management

Session Management

Context

Need to update the implementation for user sessions.

References

Application Configuration

Application Configuration

Description

Ability to configure various parts of the application without updating the code directly.

Purpose

Having a way to configure parts of the application without changing the actual code is beneficial.
For example being able to configure the port that the application is running on for different environments such as local or production.

Resources

A list of resources, can be links

Version 1

Features

  • Using a file with toml

Pull Requests

Version 2

Features

  • Using a file with ron

Pull Requests

Options

This is where a list of options can be created.

  • Using a file with toml
  • Using a file with ron

User Interface Design - Personal Page

User Interface Design- Personal Page

Context

Since the application's functionality would benefit from more information about the user, it might make sense to have a page dedicated to meta-data about the user themselves.

Tasks

  • Pick a name for the page
  • Determine what information to collect from the user
  • Determine what the interface should look like

Page/View Name

Ideas:

  • You
  • Personal
  • Me
  • Self

Data Collection

  • User's alias/name
  • Date of birth / age
  • Email address

Update Documentation

Update Documentation

Context

Documentation helps those unfamiliar with the project/application become more familiar with it.
It can also be used to provide explanation for the reasoning behind certain decisions and implementations.
This can also keep the developers honest and improve their own understanding of why the project is the way it is.

Essential

Tasks

  • Record decisions/implementations and explanations for them
  • Organize concepts and their records
  • Record implementations and explanations for them

Resources

"Getting Started" documentation is missing

The app seems a nice showcase for Perseus framework, but it's missing any "getting started" information, such as Rust and Perseus versions, and what commands are to run (I suppose it's perseus serve).

User Data Encryption

User Data Encryption

Context

Currently the application architecture is that of a web application.
The current architecture stores user data in a database running on servers not owned or managed by the users.
This means that users are unable to ensure that their data is secure themselves and therefore they must rely on the host of the application and database.

While in the future there may be additional implementations of the application that allow the user to utilize it's features without relying on external parties, currently the application host holds responsibility for almost all security of the user's data.

One way to protect user data is to use encryption to prevent anyone from reading it.
Using a key derivation function the encryption can be locked using the user's password as a key.

Currently argon2 is being used to encrypt user passwords.

Tasks

  • Determine what data should be encrypted
  • Add functionality to encrypt user data
  • Research best practices

Resources

Refactor Database Dependencies/Crates (PostgreSQL)

Database Dependencies/Crates (PostgreSQL)

Currently the project is using mobc for postgresql database connections/pooling.
The quality of this dependency should be analyzed and possibly refactored if it is deemed not the best choice in the long term.

Currently:

  • mobc
    • A generic connection pool with async/await support.
    • mobc-postgres
      • Postgres support for the mobc connection pool

Alternatives:

Client + Connection pools

Object-Relational Mapping (ORM)

In-between

Database Considerations

Database Considerations

Context

Databases are a common and effective way to retain information that is entered into the application.

Databases take on various forms and have a variety of different implementations.

Inspirations

PocketBase

PocketBase uses SQLite and embeds it into the back-end as a single executable. It runs in write ahead logging (WAL) to improve performance (in specific contexts with trade-offs).

Options

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.