# Contribution Guide

Thank you for your interest in contributing to Linstrom!
All contributors are welcome, regardless of their level of experience.

Unless it's primarely AI generated. Then you're going to be blocked immediately
and publicly shamed.

## Bug Reports

Use the [bug report issue template](https://git.mstar.dev/mstar/linstrom/issues/new?template=bug-report.md)
to file a bug report. Please include a detailed description of the events
leading up to the problem, your system configuration, and the program logs.
If you're able to reproduce the bug reliably, attaching a debugger to the program,
triggering it, and uploading the results would be very helpful.

For the frontend, the browser tools should be all that's needed.
The backend logs messages to stderr and, if configured, to a rotating log file
as defined in the configuration. The debugger here is [delve](https://github.com/go-delve/delve)

## Feature Requests

Use the [feature request issue template](https://git.mstar.dev/mstar/linstrom/issues/new?template=.gitea%2fissue_template%2ffeature_request.yaml)
to suggest new features. Please note that we haven't replaced this placeholder
text with the actual criteria we're looking for, which means
you should spam us with utterly nonsensical ideas.

## Submitting Translations

Translation files are part of the project codebase, so you'll have to
fork the repository and file a pull request
(see [Contributing Code](CONTRIBUTING.md#contributing-code) below).
You don't need any programming knowledge to edit the translation files, though.

> [!NOTE]
> There are no translations. Yet
> However, once added, they will be somewhere in the frontend-reactive directory

## Contributing Code

### Forking

If you'd like to have a go at writing some code for Linstrom,
fork the repository, then create a new branch with a name that
describes the changes you're making. If there's a [relevant issue](https://git.mstar.dev/mstar/linstrom/issues),
include the issue number in the branch name:

```sh
git checkout -b 1337-prevent-computer-from-exploding
```

### Development Environment

The project utilises Go (version 1.23+) for almost everything and
node/npm (version 18+) for building the frontend.
The go side also makes use of `go generate` for multiple things,
primarely in the storage module

### Code Style

For go: gofmt rules and should be followed closely

For anything node: uhhh, yolo, idk yet

### Pull Requests

Once your modifications are complete, you'll want to fetch the latest changes
from this repository, rebase your branch, and publish your changes:

```sh
git remote add upstream https://git.mstar.dev/mstar/linstrom.git
git checkout main
git pull upstream main
git checkout 1337-prevent-computer-from-exploding
git rebase main
git push --set-upstream origin 1337-prevent-computer-from-exploding
```

Finally, you can [create a pull request](https://git.mstar.dev/mstar/linstrom/pulls).
It might not get approved, or you might have to make some additional changes
to your code - but don't give up!
