<!-- Header -->
<div id="top" align="center">
  <br />
  
  <!-- Logo -->
  <img src="server/public/favicon.png" alt="Logo" width="200" height="200">

  <!-- Title -->
  ### Momentum
  
  <!-- Description -->
  Enterprise Record Management

  <!-- Repo badges -->
  [![Version](https://img.shields.io/badge/dynamic/json.svg?label=Version&style=for-the-badge&url=https://git.zakscode.com/api/v1/repos/ztimson/momentum/tags%3Ftoken%3D35a3bf73a216782a7435f86117412bcb9784b716&query=$[0].name)](https://git.zakscode.com/ztimson/momentum/tags)
  [![Pull Requests](https://img.shields.io/badge/dynamic/json.svg?label=Pull%20Requests&style=for-the-badge&url=https://git.zakscode.com/api/v1/repos/ztimson/momentum%3Ftoken%3D35a3bf73a216782a7435f86117412bcb9784b716&query=open_pr_counter)](https://git.zakscode.com/ztimson/momentum/pulls)
  [![Issues](https://img.shields.io/badge/dynamic/json.svg?label=Issues&style=for-the-badge&url=https://git.zakscode.com/api/v1/repos/ztimson/momentum%3Ftoken%3D35a3bf73a216782a7435f86117412bcb9784b716&query=open_issues_count)](https://git.zakscode.com/ztimson/momentum/issues)

  <!-- Links -->

  ---
  <div>
    <a href="https://git.zakscode.com/ztimson/momentum/wiki" target="_blank">Documentation</a>
    • <a href="https://git.zakscode.com/ztimson/momentum/releases" target="_blank">Release Notes</a>
    • <a href="https://git.zakscode.com/ztimson/momentum/issues/new?template=.github%2fissue_template%2fbug.md" target="_blank">Report a Bug</a>
    • <a href="https://git.zakscode.com/ztimson/momentum/issues/new?template=.github%2fissue_template%2fenhancement.md" target="_blank">Request a Feature</a>
  </div>

  ---
</div>

## Table of Contents
- [Momentum](#top)
  - [About](#about)
    - [Built With](#built-with)
  - [Setup](#setup)
    - [Production](#production)
    - [Development](#development)
  - [License](#license)

## About

Momentum is a self-hosted enterprise resource planning tool. What does that mean? Think something similar to [Firebase](https://firebase.google.com) but you are in full control of your data & services.

It was developed as a generic backend to add functionality to single page applications such as angular, react, svelte or vue. Momentum comes with a client library to make integration extremely easy.

Momentum also comes with a management interface to allow easy administration of momentum without having to build anything.

Features include:
  - Actions
    - Write server side code to create custom functionality
    - Writen with javascript & the momentum client library to minimize the learning curve
    - Custom library and can be installed & accessed from actions using Docker & NPM
    - Trigger actions including CRONs, RESTFUL requests & system events
    - Extremely fast
  - Authentication
    - Manage users with custom values
    - Manage groups with cascading permissions & custom values
    - Token management for 3rd party applications
    - Full permission system which supports custom values
    - Account validation & reset emails
    - Optional public registration form
    - OAuth support for custom applications
    - Custom password strength rules
    - Two-Factor Authentication
  - Data
    - Edit database like an Excel table 
    - Create custom forms & reports to interact with data
    - Interact with data through the REST API
    - Granular collection & document level permissions
    - Automatic metadata tracking
    - Easy import/export to CSV, Excel & JSON
  - Logs
    - Save & view server logs through the UI for easy debugging
    - Submit client logs to momentum to aid in remote debugging
    - Client logs come with device information such as user agent & screen size
  - Storage
    - Storage anything with momentum storage 
    - Built in filebrowser
    - Upload & download files with the API
    - Full file permissions
    - Automatic metadata tracking
  - Static File Server
    - Host your single page application using Momentum for easy hosting
    - Configurable routing
  - Settings
    - Full theming & white label support 
    - Manage the server through variables which can be changed at runtime
    - Create & use custom variables for your application
  - Miscellaneous
    - Automatically turn website into Progressive Web App 
    - Caching & offline support built into the client library
    - Socket support to keep all clients in sync automatically
    - Generate PDFs from templates, HTML or links
    - SMTP support to send emails from templates
    - Twilio support to manage texts & calls
    - Stripe support to handle payments & subscriptions

### Built With
[![Docker](https://img.shields.io/badge/Docker-384d54?style=for-the-badge&logo=docker)](https://docker.com/)
[![MongoDB](https://img.shields.io/badge/mongodb-000000?style=for-the-badge&logo=mongodb)](https://www.mongodb.com/)
[![Node](https://img.shields.io/badge/Node.js-000000?style=for-the-badge&logo=nodedotjs)](https://nodejs.org/)
[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://typescriptlang.org/)

## Setup

<details>
	<summary>
		<h3 id="production" style="display: inline">Production</h3>
	</summary>

#### Prerequisites
- [Docker](https://docs.docker.com/install/)

#### Instructions
1. _Optional: Use momentum to host your [static site](https://git.zakscode.com/ztimson/momentum/wiki/Static)_
2. Download the [docker-compose](https://git.zakscode.com/ztimson/momentum/src/branch/develop/docker-compose.yml) file: `curl -o momentum.yaml https://git.zakscode.com/ztimson/momentum/raw/branch/develop/docker-compose.yml`
3. Configure the [Environment Variables](https://git.zakscode.com/ztimson/momentum/wiki/Environment-Variables) inside the docker-compose
4. Start the server with: `docker-compose up -f momentum.yaml`
5. Open http://localhost:80
	- Default login: `admin/admin`
	- Configure [System Variables](https://git.zakscode.com/ztimson/momentum/wiki/System-Variables)

</details>

<details>
	<summary>
	  <h3 id="development" style="display: inline">Development</h3>
	</summary>

#### Prerequisites
- [Docker](https://docs.docker.com/install/)
- [Node.js](https://nodejs.org/en/download)

#### Instructions
1. Install the dependencies: `npm install`
2. Start MongoDB: `docker-compose up db`
3. Start the dev server: `npm run start`
4. Open http://localhost:3000
	- Default login: `admin/admin`
	- Configure [System Variables](https://git.zakscode.com/ztimson/momentum/wiki/System-Variables)

</details>

## License
Copyright © 2024 Zakary Timson | All Rights Reserved

See the [license](./LICENSE) for more information.
