- State from Navigation Bar: To navigate in-app without reloading the page, pull the chat_id and magic link magic_key from the URL navigation bar as needed and use them to determine which single-page elements to display.
- Push Single-Page State to the Navigation Bar: Use `history.pushState` to set which chat the user has navigated to, and to clear the magic link magic_key from the navigation bar after it has been used.
- Asyncronously Post and Fetch New Messages: Use asynchronous calls to the JSON API to post and fetch new messages. Continuously poll for new messages from other users and display them as they are written.
- Password Authentication: Store usernames and passwords in a MySQL or MariaDB
database.
- Password Authentication: Securely store usernames and passwords in a MySQL or MariaDB
database with bcrypt, secured with a unique salt per user and a global application pepper.