# Develop

For now Docker is a primary way of working on the repo.
However dependencies are still needed to installed locally for
the IDE setup.

## Requirements:

Python: 3.12+
NodeJS: 22.14+
PostgreSQL: 16+
Redis: 6+

## Installation

1. Check if node 22.14 or 22.13 is installed in the system:
   ```
   node --version
   ```
   If fails, follow [installation instructions](./FAQ.md#how-do-i-install-nodejs-2214-using-nvm)


2. Check if python 3.12 is installed in the system:

   ```sh
   which python 3.12
   ```

   If no path returned, follow [installation instructions](./FAQ.md#how-do-i-install-python-312-on-ubuntu-22)

3. Install `virtualenv` package if it's not installed.

   ```sh
   pip install --user virtualenv
   ```

4. Create a virtual environment:

   ```sh
   virtualenv python=3.12 venv
   ```

5. Activate the virtual environment.

   ```sh
   #   Windows ➞ venv\Scripts\activate
   source venv/bin/activate
   ```

6. Install python packages.

   ```sh
   pip install --requirement requirements.txt
   ```

7. Install  `pre-commit`  hooks.

   ```sh
   pre-commit install --install-hooks
   ```

## Database Setup

1. Install PostgreSQL if not already installed.

2. Create a database and user for the application.

3. Write in the config.json the credentials


## Redis Setup

1. Install Redis if not already installed.

2. Verify Redis is running.

3. Write in the config.json the credentials


## File Paths Configuration

The application requires several directories for storing and serving files:

1. Make sure you have the directories with files, /data, /thumbnails, /icons:

2. Serve them with nginx or what is of your choice:

3. Configure the base url to serve from that file server by setting the following env variables:

   ```env
    ICONS_PREPEND
    BANNERS_PREPEND
    THUMBNAILS_PREPEND
   ```


## RUN

1. Run the API dev server:

   ```sh
   python -m src web
   ```
2. Run frontend dev server:

   ```sh
   python -m src webpack
   ```

## Git

Configure `git` to store credentials:

```sh
git config credential.helper store
```

After the next time creds are accepted, they will be saved on hard drive
as per rules listed in `man git-credential-store`and won't be asked again.

Alternatively they can be stored temporarily in memory:

```sh
git config credential.helper cache
```

The creds are stored as per rules in `man git-credential-cache`.

## IDE

_IDE specific instructions._

### VSCode

1.  Copy  `.code-workspace`  file.

    ```sh
    cp                                              \
        configs/workspace.code-workspace.example    \
        kemono-2.code-workspace
    ```

2.  Install the recommended extensions.

[`http://localhost:5000/development`]: http://localhost:5000/development
[`http://localhost:5000/`]: http://localhost:5000/
[`http://localhost:8000/`]: http://localhost:8000/