<div align="center">
  <h1 align="center">TTime</h3>
  <p align="center">Time Tracking Platform</p>
</div>

---

## Introduction

A time tracking platform that allows users to track their time and generate reports.

## Build Instructions

The full build instruction is available [here](./BUILD.md).  
For developers specializing in the **backend**, there is documentation [here](./backend/README.md).  
For developers specializing in the **frontend**, there is documentation [here](./frontend/README.md).  

Dependencies:

- [Go](https://go.dev/)
- [Make](https://www.gnu.org/software/make/)
- [Node & npm](https://nodejs.org/en/)
- [Podman](https://podman.io/) / [Docker](https://www.docker.com/)
- [Just](https://github.com/casey/just) (Optional)

### Fedora/Red Hat

If you're on [Fedora](https://fedoraproject.org/)/Red Hat derivatives, this is as simple as:

```bash
sudo dnf install -y make golang nodejs podman just
```

### Debian/Ubuntu

Any [Debian](https://www.debian.org/)/[Ubuntu](https://ubuntu.com/desktop)-based distro:

```bash
sudo apt install -y make golang nodejs podman
sudo apt install -y just # For Ubuntu
```

### Arch Linux

[Arch Linux](https://archlinux.org/) & derivatives:

```bash
sudo pacman -S make go nodejs npm podman just
```

### MacOS

[MacOS](https://www.apple.com/macos/): (Requires [Homebrew](https://brew.sh/)) (Untested)

```bash
brew install make go nodejs npm podman just
```

### Windows

#### Vanilla Windows

The project should now build properly on Windows, given the dependencies:

- [Go](https://go.dev/)
- [Node & npm](https://nodejs.org/en/)

With chocolatey, you can install these dependencies with the following commands:

```powershell
choco install -y golang nodejs
```

Note that none of the convenience tools (Make, Podman, Just*) are available on Windows.

*Just is available, but the targets are written for a Unix-like environment.

#### Windows Subsystem for Linux (WSL)

Unfortunately, [Windows Subsystem for Linux (WSL)](https://docs.microsoft.com/en-us/windows/wsl/install) is required for the build process. Running any form of containerized workload on windows is currently unsupported. More info [here](https://podman.io/docs/installation#windows). From my understanding, WSL also requires virtualization extensions to be enabled in the BIOS, which is not always the case for all users.

It is possible to run the code on Windows, but this will be without the use of containers or any other build tools that are not available on Windows.
You will also eventually need to install the database server, which will not be containerized.

My recommendation would be to make WSL your primary development environment if you are on Windows. This will drop you into an Ubuntu environment, in which you can follow the instructions above.

You should consult the [WSL documentation](https://docs.microsoft.com/en-us/windows/wsl/install), but for any recent version of windows, installation essentially boils down to running the following command in **PowerShell as an administrator**:

```powershell
wsl --install -d Ubuntu-22.04 # To get a somewhat recent version of Go
```

After this, you can open a (wsl) terminal and run the commands:

```bash
sudo apt update && sudo apt upgrade
sudo apt install -y make podman

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt update
sudo apt install golang-go

# For a recent version of node:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
nvm install node
```

If you get any errors related to virtualization, you will need to enable virtualization in the BIOS. This is a common issue, and you can find a guide for your specific motherboard online. This is a one-time operation and will not affect your windows installation. This setting is usually called "VT-x" or "AMD-V" and is usually found in the CPU settings.
