diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..430aa3e
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,43 @@
+name: Release
+
+on:
+ push:
+ tags:
+ - 'v*'
+
+jobs:
+ release:
+ permissions:
+ contents: write
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+
+ - name: Install doctl
+ uses: digitalocean/action-doctl@v2
+ with:
+ token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
+
+ - name: Log in to DigitalOcean Container Registry with short-lived credentials
+ run: doctl registry login --expiry-seconds 14400
+
+ - name: Build and push Docker image
+ uses: docker/build-push-action@v6
+ with:
+ context: .
+ file: ./Dockerfile
+ platforms: linux/amd64,linux/arm64
+ push: true
+ target: serve
+ tags: |
+ registry.digitalocean.com/swissknife/docs:latest
+ registry.digitalocean.com/swissknife/docs:${{ github.ref_name }}
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..634d214
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,45 @@
+# syntax=docker/dockerfile:1
+
+# Stage 1: Base image.
+## Start with a base image containing NodeJS so we can build Docusaurus.
+FROM node:lts as base
+## Disable colour output from yarn to make logs easier to read.
+ENV FORCE_COLOR=0
+## Enable corepack.
+RUN corepack enable
+## Set the working directory to `/opt/docusaurus`.
+WORKDIR /opt/docusaurus
+
+# Stage 2a: Development mode.
+FROM base as dev
+## Set the working directory to `/opt/docusaurus`.
+WORKDIR /opt/docusaurus
+## Expose the port that Docusaurus will run on.
+EXPOSE 3000
+## Run the development server.
+CMD [ -d "node_modules" ] && yarn start --host 0.0.0.0 --poll 1000 || yarn install && yarn start --host 0.0.0.0 --poll 1000
+
+# Stage 2b: Production build mode.
+FROM base as prod
+## Set the working directory to `/opt/docusaurus`.
+WORKDIR /opt/docusaurus
+## Copy over the source code.
+COPY . /opt/docusaurus/
+## Install dependencies with `--immutable` to ensure reproducibility.
+RUN yarn install --immutable
+## Build the static site.
+RUN yarn build
+
+# Stage 3a: Serve with `docusaurus serve`.
+FROM prod as serve
+## Expose the port that Docusaurus will run on.
+EXPOSE 3000
+## Run the production server.
+CMD ["yarn", "serve", "--host", "0.0.0.0", "--no-open"]
+
+# Stage 3b: Serve with Caddy.
+FROM caddy:2-alpine as caddy
+## Copy the Caddyfile.
+COPY --from=prod /opt/docusaurus/Caddyfile /etc/caddy/Caddyfile
+## Copy the Docusaurus build output.
+COPY --from=prod /opt/docusaurus/build /var/docusaurus
\ No newline at end of file
diff --git a/docs/account/index.mdx b/docs/account/index.mdx
index 45e8604..f64f5c5 100644
--- a/docs/account/index.mdx
+++ b/docs/account/index.mdx
@@ -1,47 +1,27 @@
---
+title: Numeraire Account
sidebar_position: 1
+image: /img/social.png
---
-# Tutorial Intro
+Numeraire Account is the easiest gateway to the Bitcoin ecosystem.
-Let's discover **Docusaurus in less than 5 minutes**.
+You can get started by [registering a Numeraire account](account/register.mdx).
-## Getting Started
+
+
![Numeraire Account](/img/article_images/account/wallet_overview.png)
+
-Get started by **creating a new site**.
+### What can I do with a Numeraire Account?
-Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**.
-
-### What you'll need
-
-- [Node.js](https://nodejs.org/en/download/) version 18.0 or above:
- - When installing Node.js, you are recommended to check all checkboxes related to dependencies.
-
-## Generate a new site
-
-Generate a new Docusaurus site using the **classic template**.
-
-The classic template will automatically be added to your project after you run the command:
-
-```bash
-npm init docusaurus@latest my-website classic
-```
-
-You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor.
-
-The command also installs all necessary dependencies you need to run Docusaurus.
-
-## Start your site
-
-Run the development server:
-
-```bash
-cd my-website
-npm run start
-```
-
-The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there.
-
-The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/.
-
-Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes.
+- Access to a powerful and user-friendly dashboard
+- Send and receive Bitcoin at the speed of light
+- Register a LN address (*your_username@numeraire.tech*)
+- Send and receive Zaps on Nostr
+- Sort and filter your transactions
+- Manage a list of contacts
+- Generate invoices
+- And much more...
diff --git a/docs/account/register.mdx b/docs/account/register.mdx
new file mode 100644
index 0000000..7e1d04f
--- /dev/null
+++ b/docs/account/register.mdx
@@ -0,0 +1,7 @@
+---
+title: Getting Started
+sidebar_position: 2
+image: /img/social.jpg
+---
+
+To register a new account, head to the [Dashboard](https://app.numeraire.tech/login) and click on the "Sign up" link. Fill in the required information or login using your favorite social platform.
diff --git a/docs/developers/api-keys.mdx b/docs/developers/api-keys.mdx
new file mode 100644
index 0000000..1067f28
--- /dev/null
+++ b/docs/developers/api-keys.mdx
@@ -0,0 +1,9 @@
+---
+title: API Keys
+sidebar_position: 2
+image: /img/social.jpg
+---
+
+(WIP - Feature Coming soon)
+
+API Keys are used to authenticate requests to the [Numeraire API](https://api.numeraire.tech/docs). They are generated in the [Dashboard](https://app.numeraire.tech) and can be used to access the API endpoints.
\ No newline at end of file
diff --git a/docs/developers/index.mdx b/docs/developers/index.mdx
index 45e8604..b2a1a7a 100644
--- a/docs/developers/index.mdx
+++ b/docs/developers/index.mdx
@@ -1,47 +1,19 @@
---
+title: Numeraire for Developers
sidebar_position: 1
+image: /img/social.png
---
-# Tutorial Intro
+Happy that you are interested in integrating and building on Bitcoin! We are here to help you get started.
-Let's discover **Docusaurus in less than 5 minutes**.
+:::info
+This documentation is a work in progress, we strongly appreciate any feedback or contribution you may have. Theses docs are open source and can be found on [**GitHub**](https://github.com/bitcoin-numeraire/doc)
+:::
-## Getting Started
+## API Access
-Get started by **creating a new site**.
+Whether registering a [Numeraire Account](account/index.mdx) or deploying your own [Numeraire SwissKnife](swissknife/index.mdx), developers can access all the features via [API Keys](developers/api-keys.mdx) and [webhooks](developers/webhooks.mdx) through the [REST API](https://api.numeraire.tech/docs).
-Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**.
-
-### What you'll need
-
-- [Node.js](https://nodejs.org/en/download/) version 18.0 or above:
- - When installing Node.js, you are recommended to check all checkboxes related to dependencies.
-
-## Generate a new site
-
-Generate a new Docusaurus site using the **classic template**.
-
-The classic template will automatically be added to your project after you run the command:
-
-```bash
-npm init docusaurus@latest my-website classic
-```
-
-You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor.
-
-The command also installs all necessary dependencies you need to run Docusaurus.
-
-## Start your site
-
-Run the development server:
-
-```bash
-cd my-website
-npm run start
-```
-
-The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there.
-
-The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/.
-
-Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes.
+:::tip
+If you cannot find what you are looking for, we will be happy to discuss with you potential new features or improvements. Please reach out to us by opening a [**GitHub issue**](https://github.com/swissknife/issues) or by contacting us on [**Twitter**](http://x.com/NumeraireBTC) or [**Nostr**](https://nostr.com/npub1m8pwckdf3n5lyd2m463ad3u4kk98qmwfs9s7hrmj6knd07frenlsfr0uje)
+:::
\ No newline at end of file
diff --git a/docs/developers/webhooks.mdx b/docs/developers/webhooks.mdx
new file mode 100644
index 0000000..70f7ed0
--- /dev/null
+++ b/docs/developers/webhooks.mdx
@@ -0,0 +1,10 @@
+---
+title: Webhooks
+sidebar_position: 3
+image: /img/social.jpg
+---
+
+(WIP - Feature Coming soon)
+
+Webhooks are a way for an app to provide other applications with real-time information. A webhook delivers data to other applications as it happens, meaning you get data immediately.
+Unlike typical APIs where you would need to poll for data very frequently in order to get it real-time. This makes webhooks much more efficient for both provider and consumer.
\ No newline at end of file
diff --git a/docs/glossary.md b/docs/glossary.md
new file mode 100644
index 0000000..04bdc2a
--- /dev/null
+++ b/docs/glossary.md
@@ -0,0 +1,62 @@
+---
+title: Bitcoin Glossary
+description: A glossary to aid you in your Bitcoin journey!
+sidebar_position: 5
+image: /img/social.png
+---
+
+This glossary is open source and consistently being updated. If you'd like a term to be added, please [create an issue](https://github.com/bitcoin-numeraire/doc/issues) or create a pull request and define one yourself!
+
+WIP...
+
+## A
+
+## B
+
+## C
+
+## D
+
+## E
+
+## F
+
+## G
+
+## H
+
+## I
+
+## J
+
+## K
+
+## L
+
+## M
+
+## N
+
+## O
+
+## P
+
+## Q
+
+## R
+
+## S
+
+## T
+
+## U
+
+## V
+
+## W
+
+## X
+
+## Y
+
+## Z
diff --git a/docs/introduction.md b/docs/introduction.md
index 45e8604..06efd57 100644
--- a/docs/introduction.md
+++ b/docs/introduction.md
@@ -1,47 +1,65 @@
---
+title: About Numeraire
sidebar_position: 1
+image: /img/social.png
---
-# Tutorial Intro
+**Numeraire Technologies** is a Bitcoin development company focused on increasing Bitcoin adoption (making it the de facto [_numeraire_](https://en.wikipedia.org/wiki/Num%C3%A9raire)). To do so, we develop products and services on different Bitcoin related technologies (Mining, Lightning, Nostr and RGB smart contracts).
-Let's discover **Docusaurus in less than 5 minutes**.
+## Our Products
-## Getting Started
+Currently, Numeraire proposes different products and services for individuals and companies willing to integrate Bitcoin in a simple and flexible way, either custodially for ease of use, or self-custodially for maximum control, privacy and sovereignty.
-Get started by **creating a new site**.
+### Numeraire Account
-Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**.
+Registering a [Numeraire Account](account/index.mdx) allows you to:
-### What you'll need
+- Send and receive Bitcoin through the Lightning Network
+- Register a LN and Nostr Address (*your_username@numeraire.tech*)
+- Send and Receive Zaps on Nostr
+- Access your account programatically via API Keys
+- As a developer, integrate Bitcoin into your app with the [REST API](https://api.numeraire.tech/docs)
-- [Node.js](https://nodejs.org/en/download/) version 18.0 or above:
- - When installing Node.js, you are recommended to check all checkboxes related to dependencies.
+[here](account/index.mdx) Register an account through the dashboard and discover all the features a Numeraire Account offers [here](account/index.mdx).
-## Generate a new site
+:::info
+Registering an account is free, without transaction fees, the only fees perceived are the Lightning protocol fees.
+:::
-Generate a new Docusaurus site using the **classic template**.
+### Numeraire SwissKnife
-The classic template will automatically be added to your project after you run the command:
+[Numeraire SwissKnife](swissknife/index.mdx) is a wallet and transaction orchestrator enabling easy integration of Bitcoin, Lightning, Nostr and smart contract protocols to any entity that wishes so without the complexities of above technologies. Built in Rust.
-```bash
-npm init docusaurus@latest my-website classic
-```
+- Multi-user Bitcoin and Lightning wallet
+- Register your own LN and Nostr Addresses (*your_username@your_domain.com*)
+- Connect to a multitude of different Lightning Providers (Breez, Core Lightning, LND, Phoenix, Lightspark)
+- Runs on your desktop, Raspberry Pi (Umbrel, Raspiblitz, ...) or on a server in the cloud.
+- Everything the Numeraire Dashboard has to offer, as the dashboard is essentially the Numeraire SwissKnife ran as a service.
-You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor.
+Discover how to use and deploy a Numeraire SwissKnife [here](swissknife/index.mdx). Explore the implementation of
-The command also installs all necessary dependencies you need to run Docusaurus.
+### Numeraire for Developers
-## Start your site
+Whether registering a Numeraire Account or deploying your own Numeraire SwissKnife, developers can access all the features via API Keys and webhooks through the [REST API](https://api.numeraire.tech/docs).
-Run the development server:
+Discover how to integrate Bitcoin and Lightning in your app with [Numeraire for Developers](developers/index.mdx).
-```bash
-cd my-website
-npm run start
-```
+### Useful links
-The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there.
+- [User Dashboard](https://app.numeraire.tech)
-The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/.
+- [Nostr](https://nostr.com/npub1m8pwckdf3n5lyd2m463ad3u4kk98qmwfs9s7hrmj6knd07frenlsfr0uje)
-Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes.
+- [Twitter](http://x.com/NumeraireBTC)
+
+- [Website](https://numeraire.tech)
+
+- [Brand Assets](https://numeraire.tech/brand-assets)
+
+- [REST API Reference](https://api.numeraire.tech/docs)
+
+- [Lightning Node](https://amboss.space/node/02fc22cb2dd9c71b39ad246ae206259376e0127cce2192d4061abd0172b53f391b)
+
+:::tip
+If you run into a problem or have any question, reach out via [**Numeraire Contact page**](https://numeraire.tech/contact) and let us know.
+:::
diff --git a/docs/swissknife/architecture/index.mdx b/docs/swissknife/architecture/index.mdx
new file mode 100644
index 0000000..04322d2
--- /dev/null
+++ b/docs/swissknife/architecture/index.mdx
@@ -0,0 +1,7 @@
+---
+title: Architecture
+sidebar_position: 1
+image: /img/social.png
+---
+
+Architecture guide coming soon. Stay tuned!
\ No newline at end of file
diff --git a/docs/swissknife/configuration/authentication.mdx b/docs/swissknife/configuration/authentication.mdx
new file mode 100644
index 0000000..eee6ea9
--- /dev/null
+++ b/docs/swissknife/configuration/authentication.mdx
@@ -0,0 +1,29 @@
+---
+title: Authentication
+sidebar_position: 3
+image: /img/social.png
+---
+
+Numeraire SwissKnife supports multiple authentication methods:
+
+## JWT (`auth_provider = "jwt"`)
+
+JWT authentication gives full access to an admin via the [`sign-in`](https://api.numeraire.tech/docs#tag/authentication/POST/v1/auth/sign-in) endpoint. The admin username and password need to be set in the configuration file.
+
+JWT authentication can also be used with third-party authentication providers that do not provide asymmetric keys (like Supabase).
+In this case, the `jwt.secret` value should be set in the configuration file.
+
+See the configuration values for JWT [here](swissknife/configuration/index.mdx#authentication).
+
+## OAuth2 (`auth_provider = "oauth2"`)
+
+OAuth2 authentication allows users to sign in with their OAuth2 provider. The `domain` and `audience` need to be set in the conffiguration file.
+Numeraire SwissKnife will automatically fetch the JWK Set in intervals (`jwks_refresh_interval`) from the provider and validate the JWT, enabling key rotation.
+
+See the configuration values for OAuth2 [here](swissknife/configuration/index.mdx#authentication).
+
+*Tested with [Auth0](https://auth0.com/)*.
+
+## Not finding your preferred auth method?
+
+If you want to use a different authentication method, please open a feature request on our [GitHub repository](https://github.com/bitcoin-numeraire/swissknife/issues).
diff --git a/docs/swissknife/configuration/authorization.mdx b/docs/swissknife/configuration/authorization.mdx
new file mode 100644
index 0000000..b16b36d
--- /dev/null
+++ b/docs/swissknife/configuration/authorization.mdx
@@ -0,0 +1,31 @@
+---
+title: Authorization
+sidebar_position: 4
+image: /img/social.png
+---
+
+Numeraire SwissKnife has Role Based Access Control (RBAC) implemented for authorization.
+The permissions are added to the user's JWT token and are checked on each request.
+
+## Permissions
+
+Permissions are defined in the `permissions` field of the user's JWT token.
+The permissions are a list of strings, each representing a permission and are checked against the requested endpoint and method.
+
+It is the responsibility of the client's authentication provider (Auth0, Supabase, etc.) to add the permissions to the JWT token.
+When using the [`sign-in`](https://api.numeraire.tech/docs#tag/authentication/POST/v1/auth/sign-in) endpoint, all permissions are added to the JWT token, the user acting as a superuser.
+
+### Example
+
+```json
+{
+ "sub": "1234567890",
+ ...,
+ "permissions": [
+ "read:transactions"
+ ]
+}
+```
+In this example, the user has the permissions to read transactions.
+
+To see the permissions required for each endpoint, check the [API documentation](https://api.numeraire.tech/docs).
\ No newline at end of file
diff --git a/docs/swissknife/configuration/database.mdx b/docs/swissknife/configuration/database.mdx
new file mode 100644
index 0000000..09dac2d
--- /dev/null
+++ b/docs/swissknife/configuration/database.mdx
@@ -0,0 +1,15 @@
+---
+title: Database
+sidebar_position: 4
+image: /img/social.png
+---
+
+Numeraire SwissKnife supports multiple SQL databases by using the powerful Rust ORM, [SeaORM](https://www.sea-ql.org/SeaORM/) under the hood.
+
+Tested with PostgreSQL, we are confident the implementation should work with SQLite (testing soon), MySQL or MariaDB.
+
+See the configuration values for the database [here](swissknife/configuration/index.mdx#database).
+
+## Not finding your preferred database?
+
+If you want to use a different SQL database, please open a feature request on our [GitHub repository](https://github.com/bitcoin-numeraire/swissknife/issues).
diff --git a/docs/swissknife/configuration/default.mdx b/docs/swissknife/configuration/default.mdx
new file mode 100644
index 0000000..519dd62
--- /dev/null
+++ b/docs/swissknife/configuration/default.mdx
@@ -0,0 +1,97 @@
+---
+title: Default config
+sidebar_position: 2
+image: /img/social.png
+---
+
+Here is the default configuration file for Numeraire SwissKnife. You can find it on the [GitHub repository](https://github.com/bitcoin-numeraire/swissknife/blob/main/config/default.toml) as well.
+
+:::note
+The default configuration file is a `toml` file. SwissKnife supports `toml`, `yaml` and `json` config files.
+:::
+
+Some optional and sensitive values are not added to the default configuration file. You can find them in the [`.env.example`](https://github.com/bitcoin-numeraire/swissknife/blob/main/.env.example) file and in the [configuration values](swissknife/configuration/index.mdx#configuration-values).
+
+```toml
+# App
+invoice_expiry = "12h"
+domain = "numeraire.tech"
+host = "https://api.numeraire.tech"
+fee_buffer = 0.02
+ln_provider = "breez"
+auth_provider = "jwt"
+
+# Web server
+[web]
+addr = "0.0.0.0:3000"
+request_timeout = "60s"
+
+# Breez Lightning provider
+[breez_config]
+working_dir = "storage/breez"
+certs_dir = "certs/greenlight"
+log_in_file = false
+restore_only = true
+api_key = "CHANGE_ME"
+seed = "CHANGE_ME"
+
+# Core Lightning provider
+[cln_grpc_config]
+endpoint = "https://localhost:50051"
+certs_dir = "certs/lightningd"
+maxfeepercent = 0.5
+payment_timeout = "60s"
+payment_exemptfee = 5000
+retry_delay = "5s"
+
+[cln_rest_config]
+endpoint = "http://localhost:3010"
+rune = "CHANGE_ME"
+connect_timeout = "5s"
+timeout = "90s"
+connection_verbose = true
+accept_invalid_certs = false
+accept_invalid_hostnames = false
+maxfeepercent = 0.5
+payment_timeout = "60s"
+payment_exemptfee = 5000
+ws_min_reconnect_delay_delay = 1
+ws_max_reconnect_delay_delay = 30
+
+# Logging
+[logging]
+format = "json"
+ansi = false
+line_number = false
+thread_ids = false
+thread_names = false
+level = "info"
+filter = "swissknife=info"
+file = false
+
+# Authentication
+[oauth2]
+domain = "domain.auth0.com"
+audience = "https://swissknife.numeraire.tech/api/v1"
+jwks_refresh_interval = "1h"
+leeway = "60s"
+
+[jwt]
+username = "admin"
+password = "CHANGE_ME"
+token_expiry = "1h"
+secret = "CHANGE_ME"
+
+# Database
+[database]
+max_lifetime = "30m"
+idle_timeout = "5m"
+max_connections = 10
+min_connections = 0
+acquire_timeout = "5s"
+connect_timeout = "30s"
+sqlx_logging = true
+```
+
+This file should ideally not be modified directly. Instead, you should create a new configuration file (called `development.toml` or `production.toml`) and override the default values.
+You can find more information on how to do this in the [configuration guide](swissknife/configuration/index.mdx).
\ No newline at end of file
diff --git a/docs/swissknife/configuration/index.mdx b/docs/swissknife/configuration/index.mdx
new file mode 100644
index 0000000..60e499c
--- /dev/null
+++ b/docs/swissknife/configuration/index.mdx
@@ -0,0 +1,142 @@
+---
+title: Configuration
+sidebar_position: 1
+image: /img/social.png
+---
+
+Default configuration is defined in `config/default.toml`. SwissKnife supports `toml`, `yaml` and `json` config files. The order of applied configuration is the following:
+
+1. ENV vars. Defined given the names of the config values in `default.toml`, adding the prefix `SWISSKNIFE`. Overriding all sensitive values with ENV vars is recommended. For example, `SWISSKNIFE_DATABASE__URL` will override the `database_url` value in the config (underscores are replaced with double underscores).
+2. any file under `config` corresponding to the `RUN_MODE` (`development` by default). Such as `development.toml|yaml|json` or `production.toml|yaml|json`.
+3. The `default.toml|yaml|json` file.
+
+Inspect the `.env.example` file for and generate your own `.env` for sensitive config values.
+
+On Kubernetes, you can use a `ConfigMap` to inject the configuration into the container and secrets for sensitive values.
+
+## Configuration values
+
+### App
+
+Config values for the application's business logic. To be placed at the root.
+
+| Config Value | Description |
+|--------------------|--------------------------------------------------|
+| `invoice_expiry` | Expiry time for generated invoices |
+| `domain` | Application's domain |
+| `host` | API host URL |
+| `fee_buffer` | Buffer percentage for transaction fees |
+| `ln_provider` | Lightning Network provider |
+| `auth_provider` | Authentication provider |
+
+### Web server
+
+Config values for the web server. To be placed under `web`.
+
+| Config Value | Description |
+|--------------------|--------------------------------------------------|
+| `web.addr` | Web server bind address and port |
+| `web.request_timeout` | Request timeout duration |
+
+### Breez Lightning provider
+
+Config values for Breez Lightning provider. To be placed under `breez_config`.
+
+| Config Value | Description |
+|------------------------|--------------------------------------------------|
+| `breez_config.working_dir` | Directory for Breez working files |
+| `breez_config.certs_dir` | Directory for Breez certificates |
+| `breez_config.log_in_file` | Log output to file |
+| `breez_config.restore_only`| Restore only mode |
+| `breez_config.api_key` | API key for Breez |
+| `breez_config.seed` | Seed value for Breez |
+
+### Core Lightning provider (gRPC)
+
+Config values for Core [Lightning provider using gRPC](https://docs.corelightning.org/docs/grpc). To be placed under `cln_grpc_config`.
+
+| Config Value | Description |
+|---------------------------|--------------------------------------------------|
+| `cln_grpc_config.endpoint` | gRPC endpoint for Core Lightning |
+| `cln_grpc_config.certs_dir`| Directory for Core Lightning certificates |
+| `cln_grpc_config.maxfeepercent` | Maximum fee percentage for payments |
+| `cln_grpc_config.payment_timeout` | Payment timeout duration |
+| `cln_grpc_config.payment_exemptfee` | Exempt fee value for payments |
+| `cln_grpc_config.retry_delay` | Delay between retries |
+
+### Core Lightning provider (REST)
+
+Config values for Core [Lightning provider using REST](https://docs.corelightning.org/docs/rest). To be placed under `cln_rest_config`.
+Numeraire SwisskKnife uses runes and the websocket server to sync events from the node.
+
+| Config Value | Description |
+|----------------------------------|--------------------------------------------------|
+| `cln_rest_config.endpoint` | REST endpoint for Core Lightning |
+| `cln_rest_config.rune` | Rune value for Core Lightning |
+| `cln_rest_config.connect_timeout`| Connection timeout duration |
+| `cln_rest_config.timeout` | Request timeout duration |
+| `cln_rest_config.connection_verbose` | Enable verbose connection logging |
+| `cln_rest_config.accept_invalid_certs` | Accept invalid certificates |
+| `cln_rest_config.accept_invalid_hostnames` | Accept invalid hostnames |
+| `cln_rest_config.maxfeepercent` | Maximum fee percentage for payments |
+| `cln_rest_config.payment_timeout`| Payment timeout duration |
+| `cln_rest_config.payment_exemptfee` | Exempt fee value for payments |
+| `cln_rest_config.ws_min_reconnect_delay_delay` | Minimum WebSocket reconnect delay |
+| `cln_rest_config.ws_max_reconnect_delay_delay` | Maximum WebSocket reconnect delay |
+
+:::tip
+Use an ENV var for `SWISSKNIFE_CLN_REST_CONFIG__RUNE`, as that value is highly sensitive.
+:::
+
+### Logging
+
+Config values for logging. To be placed under `logging`.
+
+| Config Value | Description |
+|-----------------------|--------------------------------------------------|
+| `logging.format` | Format of log output |
+| `logging.ansi` | Enable ANSI colors in logs |
+| `logging.line_number` | Include line numbers in logs |
+| `logging.thread_ids` | Include thread IDs in logs |
+| `logging.thread_names`| Include thread names in logs |
+| `logging.level` | Logging level |
+| `logging.filter` | Logging filter rules |
+| `logging.file` | Output logs to file |
+
+### Authentication
+
+Config values for authentication. To be placed under `oauth2` or `jwt` depending on the choice of authentication.
+Numeraire SwissKnife supports OAuth2 and JWT authentication.
+
+| Config Value | Description |
+|--------------------------------|--------------------------------------------------|
+| `oauth2.domain` | OAuth2 domain |
+| `oauth2.audience` | OAuth2 audience |
+| `oauth2.jwks_refresh_interval` | JWKS refresh interval |
+| `oauth2.leeway` | Leeway time for token validation |
+| `jwt.username` | Username for JWT authentication |
+| `jwt.password` | Password for JWT authentication |
+| `jwt.token_expiry` | JWT token expiry time |
+| `jwt.secret` | Secret key for JWT authentication |
+
+:::tip
+Use ENV vars for `SWISSKNIFE_JWT__SECRET` and `SWISSKNIFE_JWT__PASSWORD`, as these values are highly sensitive.
+:::
+
+### Database
+
+Config values for the database connection. To be placed under `database`.
+
+| Config Value | Description |
+|-------------------------|--------------------------------------------------|
+| `database.max_lifetime` | Maximum connection lifetime |
+| `database.idle_timeout` | Idle timeout duration |
+| `database.max_connections` | Maximum number of connections |
+| `database.min_connections` | Minimum number of connections |
+| `database.acquire_timeout` | Timeout for acquiring a connection |
+| `database.connect_timeout` | Timeout for establishing a connection |
+| `database.sqlx_logging` | Enable SQLx logging |
+
+:::tip
+Use an ENV var for the `SWISSKNIFE_DATABASE__URL`.
+:::
diff --git a/docs/swissknife/configuration/ln-providers.mdx b/docs/swissknife/configuration/ln-providers.mdx
new file mode 100644
index 0000000..3b8242e
--- /dev/null
+++ b/docs/swissknife/configuration/ln-providers.mdx
@@ -0,0 +1,84 @@
+---
+title: Lightning Providers
+sidebar_position: 2
+image: /img/social.png
+---
+
+Numeraire SwissKnife supports multiple Lightning Network providers. The choice of provider depends on your needs and preferences regarding
+ease of use, privacy and sovereignty.
+
+You can manage your node through the dashboard or the REST API.
+
+:::tip
+The simplest way to get started with Numeraire SwissKnife is to use the **Breez** Lightning provider and get your own Lightning node up
+and running in minutes in a non-custodial way in the Blockstream Greenlight cloud.
+:::
+
+## Core Lightning
+
+[Core Lightning](https://corelightning.org/) is a non-custodial Lightning Network implementation built in C and Rust by Blockstream. It allows you to run your own node and manage your own liquidity.
+Core Lightning offers a gRPC and REST API, both supported.
+
+- Non-custodial
+- Run your own node
+- Manage your own liquidity
+
+
+
![Core Lightning node](/img/article_images/swissknife/cln_node_overview.png)
+
+*Preview of the Core Lightning node management in the dashboard*.
+
+### gRPC (`ln_provider = "clngrpc"`)
+
+See the configuration values for Core Lightning gRPC [here](swissknife/configuration/index.mdx#core-lightning-provider-grpc).
+
+### REST (`ln_provider = "clnrest`)
+
+See the configuration values for Core Lightning REST [here](swissknife/configuration/index.mdx#core-lightning-provider-rest).
+
+## Breez Greenlight (`ln_provider = "breez"`)
+
+[Breez](https://breez.technology/) is a cloud-based Lightning integration. It offers a self-custodial, end-to-end solution
+for integrating Lightning payments, utilizing nodes-on-demand provided by Blockstream’s Greenlight,
+with built-in Lightning Service Providers (LSP), on-chain interoperability and much more.
+
+Numeraire SwissKnife supports the [Breez SDK](https://github.com/breez/breez-sdk-greenlight).
+
+- Non-custodial
+- Automatic node management
+- Automatic liquidity management via LSPs
+
+
+
![Breez Greenlight node](/img/article_images/swissknife/breez_node_overview.png)
+
+*Preview of the Breez Greenlight node management in the dashboard*.
+
+See the configuration values for Breez [here](swissknife/configuration/index.mdx#breez-lightning-provider).
+
+## LND
+
+[The Lightning Network Daemon](https://github.com/lightningnetwork/lnd) (LND) - is a complete implementation of a Lightning Network node built in Go by Lightning Labs. It is the most popular Lightning Network implementation and is widely used in the Bitcoin ecosystem.
+
+Coming soon...
+
+## Phoenixd
+
+[phoenixd](https://github.com/ACINQ/phoenixd) is the server equivalent of the popular phoenix wallet for mobile. It is written in Kotlin Multiplatform and runs natively on Linux, MacOS (x86 and ARM), and Windows (WSL).
+
+Coming soon...
+
+## Lightspark
+
+[Lightspark](https://www.lightspark.com/) Connect is a software service that enables our customers to use the Lightning Network to send and receive payments. Through an easy interface, customers control their funds on Lightning. Lightspark cannot initiate customer transactions or move or control customer funds. Customers can move funds to a different service at any time.
+
+Coming soon...
+
+## Not finding your provider?
+
+If you want to use a different Lightning provider, please open a feature request on our [GitHub repository](https://github.com/bitcoin-numeraire/swissknife/issues).
diff --git a/docs/swissknife/deployment/docker.mdx b/docs/swissknife/deployment/docker.mdx
new file mode 100644
index 0000000..012ca64
--- /dev/null
+++ b/docs/swissknife/deployment/docker.mdx
@@ -0,0 +1,7 @@
+---
+title: Docker
+sidebar_position: 1
+image: /img/social.png
+---
+
+The docker images are currently hosted on a private registry. To get access to the images, please [contact us](https://numeraire.tech/contact).
\ No newline at end of file
diff --git a/docs/swissknife/deployment/index.mdx b/docs/swissknife/deployment/index.mdx
new file mode 100644
index 0000000..33baf62
--- /dev/null
+++ b/docs/swissknife/deployment/index.mdx
@@ -0,0 +1,11 @@
+---
+title: Deployment
+sidebar_position: 2
+image: /img/social.png
+---
+
+In order to get started with Numeraire SwissKnife, you will need to install/deploy the software. Choose your preferred method below:
+
+- [Docker](swissknife/deployment/docker.mdx)
+- [Kubernetes](swissknife/deployment/kubernetes.mdx)
+- [Build from source](swissknife/deployment/source.mdx)
diff --git a/docs/swissknife/deployment/kubernetes.mdx b/docs/swissknife/deployment/kubernetes.mdx
new file mode 100644
index 0000000..30a5aa4
--- /dev/null
+++ b/docs/swissknife/deployment/kubernetes.mdx
@@ -0,0 +1,14 @@
+---
+title: Kubernetes
+sidebar_position: 2
+image: /img/social.png
+---
+
+## Helm charts
+
+You can find an example helm charts on our [GitHub repository](https://github.com/bitcoin-numeraire/k8s-infra).
+For maximum flexibility, we recommend you to fork the repository and modify the charts to suit your needs. The repo contains a full infrastructure, including a Bitcoin node,
+a Lightning node (Core Lightning), a Postgres database, monitoring, networking and the SwissKnife application.
+
+- The [`dashboard`](https://github.com/bitcoin-numeraire/k8s-infra/tree/main/charts/dashboard) chart is used to deploy the SwissKnife Dashboard NextJS application.
+- The [`swissknife`](https://github.com/bitcoin-numeraire/k8s-infra/tree/main/charts/swissknife) chart is used to deploy the SwissKnife Backend Rust application.
diff --git a/docs/swissknife/deployment/source.mdx b/docs/swissknife/deployment/source.mdx
new file mode 100644
index 0000000..f88bc05
--- /dev/null
+++ b/docs/swissknife/deployment/source.mdx
@@ -0,0 +1,34 @@
+---
+title: Build from source
+sidebar_position: 3
+image: /img/social.png
+---
+
+There are numerous ways to build Numeraire SwissKnife from source. You can either download the artifacts from the release
+page [here](https://github.com/bitcoin-numeraire/swissknife/releases) or clone the repository (we recommend checking out the desired release and not use `main` directly).
+
+## Cargo
+
+A common way is to use the [`cargo`](https://doc.rust-lang.org/cargo/getting-started/installation.html) package manager, which is the Rust programming language's official package manager.
+
+```bash
+git clone git@github.com:bitcoin-numeraire/swissknife.git
+cd swissknife
+cargo build --release
+```
+
+## Docker
+
+Another way is to use Docker. You can build the Docker image with the following command from the Makefile.
+
+```bash
+git clone git@github.com:bitcoin-numeraire/swissknife.git
+cd swissknife
+make build-docker
+```
+
+Once the image is built, you can run it with the following command.
+
+```bash
+make run-docker
+```
diff --git a/docs/swissknife/getting-started.mdx b/docs/swissknife/getting-started.mdx
new file mode 100644
index 0000000..45b9fe8
--- /dev/null
+++ b/docs/swissknife/getting-started.mdx
@@ -0,0 +1,26 @@
+---
+title: Getting Started
+sidebar_position: 2
+image: /img/social.png
+---
+
+## Deployment
+
+In order to get started with Numeraire SwissKnife, you will need to install/deploy the software. You can find the deployment guide [here](swissknife/deployment/index.mdx).
+
+## Configuration
+
+Once you have deployed Numeraire SwissKnife, you will need to configure it. You can find the configuration guide [here](swissknife/configuration/index.mdx).
+You can find the default configuration file [here](swissknife/configuration/default.mdx).
+
+## Usage
+
+Once you have deployed and configured Numeraire SwissKnife, you can start using it. You can find the usage guide [here](swissknife/usage/index.mdx).
+
+## Architecture
+
+If you'd like to know more about the software implementation and its integration in the Lightning Network, check our architecture docs [here](swissknife/architecture/index.mdx).
+
+## Troubleshooting
+
+If you encounter any issues, do not hesitate to [report it](https://github.com/bitcoin-numeraire/swissknife/issues) or [contact us](https://numeraire.tech/contact) directly. We are here to help you.
diff --git a/docs/swissknife/index.mdx b/docs/swissknife/index.mdx
index 45e8604..e5a5de9 100644
--- a/docs/swissknife/index.mdx
+++ b/docs/swissknife/index.mdx
@@ -1,47 +1,52 @@
---
+title: Numeraire SwissKnife
sidebar_position: 1
+image: /img/social.png
---
-# Tutorial Intro
-
-Let's discover **Docusaurus in less than 5 minutes**.
-
-## Getting Started
-
-Get started by **creating a new site**.
-
-Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**.
-
-### What you'll need
-
-- [Node.js](https://nodejs.org/en/download/) version 18.0 or above:
- - When installing Node.js, you are recommended to check all checkboxes related to dependencies.
-
-## Generate a new site
-
-Generate a new Docusaurus site using the **classic template**.
-
-The classic template will automatically be added to your project after you run the command:
-
-```bash
-npm init docusaurus@latest my-website classic
-```
-
-You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor.
-
-The command also installs all necessary dependencies you need to run Docusaurus.
-
-## Start your site
-
-Run the development server:
-
-```bash
-cd my-website
-npm run start
-```
-
-The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there.
-
-The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/.
-
-Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes.
+Numeraire SwissKnife is a wallet and transaction orchestrator enabling easy integration of Bitcoin, Lightning, Nostr and smart contract protocols to any entity that wishes so without the complexities of above technologies.
+
+Running your own SwissKnife instance allows you to be self-sovereign, have full control over your funds and privacy and participate in the Bitcoin network in a trustless way. We highly recommend
+installing SwissKnife on your own hardware, either on your desktop, on a Raspberry Pi or on a server in the cloud. If you don't want to be bothered, you can use the [Numeraire Dashboard](https://app.numeraire.tech), which is essentially the SwissKnife ran as a service.
+
+
+
![Numeraire SwissKnife](/img/article_images/account/wallet_overview.png)
+
+
+## Features
+
+- [`Lightning Network`](https://github.com/lnurl/luds). Send and receive payments.
+- [`LNURL`](https://github.com/lnurl/luds) support.
+- [`Lightning Address`](https://lightningaddress.com/). Deploy your own Lightning Address infrastructure. Like email, anyone can use identifiers (`username@your.domain`) to send and receive payments.
+- Generate invoices.
+- Account segregation. Support any amount of users.
+- Internal ledger for instant payments on the same SwissKnife instance.
+- REST API.
+- Frequent contacts.
+- `JWKS` with automatic public key retrieval
+- `JWT` token authentication` (tested with Auth0, Supabase).
+- `RBAC`. Fine grained authorization.
+- Data availability through pagination and advanced search.
+- Advanced [Dashboard](https://github.com/bitcoin-numeraire/swissknife-dashboard).
+- Runs in the cloud, on your desktop or on a Raspberry Pi (or similar).
+
+## Lightning Providers
+
+SwissKnife allows direct Lightning integration, supporting the most used node implementations and well-known providers:
+
+- [`Core Lightning`](https://corelightning.org/):
+ - Non-custodial
+ - Run your own node
+ - Manage your own liquidity.
+- [`Greenlight`](https://blockstream.com/lightning/greenlight/):
+ - Non-custodial
+ - Automatic node management.
+ - Manage your own liquidity.
+- [`Breez`](https://breez.technology/sdk/):
+ - Non-custodial
+ - Automatic node management.
+ - Automatic liquidity management via LSPs (user can switch LSPs)
+
\ No newline at end of file
diff --git a/docs/swissknife/usage/index.mdx b/docs/swissknife/usage/index.mdx
new file mode 100644
index 0000000..c798b4f
--- /dev/null
+++ b/docs/swissknife/usage/index.mdx
@@ -0,0 +1,7 @@
+---
+title: Usage
+sidebar_position: 1
+image: /img/social.png
+---
+
+Usage guide coming soon. Stay tuned!
\ No newline at end of file
diff --git a/package.json b/package.json
index ccd4f4e..4f13fa9 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "numeraire-docs",
"author": "Dario Anongba Varela",
- "version": "0.0.1",
+ "version": "0.1.0",
"email": "dario.varela@numeraire.tech",
"description": "Numeraire products documentation",
"scripts": {
diff --git a/sidebars.ts b/sidebars.ts
index fdb3a62..f854b65 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -11,14 +11,86 @@ import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
Create as many sidebars as you want.
*/
const sidebars: SidebarsConfig = {
+ introSidebar: [
+ "introduction",
+ "account/index",
+ "swissknife/index",
+ "developers/index",
+ "glossary",
+ {
+ type: "link",
+ label: "Contact Us",
+ href: "https://numeraire.tech/contact",
+ },
+ ],
accountSidebar: [
"account/index",
+ "account/register",
+ {
+ type: "link",
+ label: "Contact Us",
+ href: "https://numeraire.tech/contact",
+ },
],
developersSidebar: [
- "developers/index"
+ "developers/index",
+ "developers/api-keys",
+ "developers/webhooks",
+ {
+ type: "link",
+ label: "API Reference",
+ href: "https://api.numeraire.tech/docs",
+ },
+ {
+ type: "link",
+ label: "Contact Us",
+ href: "https://numeraire.tech/contact",
+ },
],
swissknifeSidebar: [
- "swissknife/index"
+ "swissknife/index",
+ "swissknife/getting-started",
+ {
+ type: "category",
+ label: "Deployment",
+ link: {
+ type: "doc",
+ id: "swissknife/deployment/index",
+ },
+ items: [
+ "swissknife/deployment/docker",
+ "swissknife/deployment/kubernetes",
+ "swissknife/deployment/source",
+ ],
+ },
+ {
+ type: "category",
+ label: "Configuration",
+ link: {
+ type: "doc",
+ id: "swissknife/configuration/index",
+ },
+ items: [
+ "swissknife/configuration/default",
+ "swissknife/configuration/ln-providers",
+ "swissknife/configuration/authentication",
+ "swissknife/configuration/authorization",
+ "swissknife/configuration/database",
+ ],
+ },
+ "swissknife/usage/index",
+ "swissknife/architecture/index",
+ "glossary",
+ {
+ type: "link",
+ label: "API Reference",
+ href: "https://api.numeraire.tech/docs",
+ },
+ {
+ type: "link",
+ label: "Contact Us",
+ href: "https://numeraire.tech/contact",
+ },
],
};
diff --git a/static/img/article_images/account/wallet_overview.png b/static/img/article_images/account/wallet_overview.png
new file mode 100644
index 0000000..0d011a0
Binary files /dev/null and b/static/img/article_images/account/wallet_overview.png differ
diff --git a/static/img/article_images/swissknife/breez_node_overview.png b/static/img/article_images/swissknife/breez_node_overview.png
new file mode 100644
index 0000000..b6f8c51
Binary files /dev/null and b/static/img/article_images/swissknife/breez_node_overview.png differ
diff --git a/static/img/article_images/swissknife/cln_node_overview.png b/static/img/article_images/swissknife/cln_node_overview.png
new file mode 100644
index 0000000..f54490e
Binary files /dev/null and b/static/img/article_images/swissknife/cln_node_overview.png differ