diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..4226e52
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,3 @@
+# These are supported funding model platforms
+
+github: [flexiondotorg]
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..8417bbb
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,44 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: 'bug: description of the bug you encountered'
+labels: ''
+assignees: ''
+
+---
+
+**I confirm this bug has not already been reported**
+- [ ] I have searched the issues and this bug has not been reported previously
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Run `stream-sprout` with arguments '...'
+2. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Stream Sprout output**
+Run `stream-sprout` and include the output of the failure below:
+
+
+ Stream Sprout output
+
+ ```text
+ stream-sprout output here
+ ```
+
+
+**System information**
+- OS: [e.g. Ubuntu 20.04]
+- stream-sprout version: [e.g. 0.1.0]
+- FFmpeg version: [e.g. 4.2.4]
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..48ded58
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,23 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: 'feat: describe the feature you are requesting'
+labels: ''
+assignees: ''
+
+---
+
+**I confirm this feature has not been previously requested**
+- [ ] I have searched the issues and this feature has not previously been requested
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/.github/apple.png b/.github/apple.png
new file mode 100644
index 0000000..547f94b
Binary files /dev/null and b/.github/apple.png differ
diff --git a/.github/logo.png b/.github/logo.png
new file mode 100644
index 0000000..9281e4f
Binary files /dev/null and b/.github/logo.png differ
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 0000000..d8acb5e
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,26 @@
+# Description
+
+Please include a summary of the changes along with any relevant motivation and context.
+
+
+
+- Closes #
+- Fixes #
+- Resolves #
+
+## Type of change
+
+
+
+- [ ] Bug fix (non-breaking change which fixes an issue)
+- [ ] New feature (non-breaking change which adds functionality)
+- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
+- [ ] Packaging (updates the packaging)
+- [ ] Documentation (updates the documentation)
+
+# Checklist:
+
+- [ ] I have performed a self-review of my code
+- [ ] I have tested my code in common scenarios and confirmed there are no regressions
+- [ ] I have added comments to my code, particularly in hard-to-understand sections
+- [ ] I have made corresponding changes to the documentation (*remove if no documentation changes were required*)
diff --git a/.github/tux.png b/.github/tux.png
new file mode 100644
index 0000000..091ddbd
Binary files /dev/null and b/.github/tux.png differ
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..2d4c961
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,128 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, religion, or sexual identity
+and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+## Our Standards
+
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the
+ overall community
+
+Examples of unacceptable behavior include:
+
+* The use of sexualized language or imagery, and sexual attention or
+ advances of any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or email
+ address, without their explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Enforcement Responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported to the community leaders responsible for enforcement at
+#broadcasting channel on Discord.
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series
+of actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or
+permanent ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within
+the community.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.0, available at
+https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
+
+Community Impact Guidelines were inspired by [Mozilla's code of conduct
+enforcement ladder](https://github.com/mozilla/diversity).
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see the FAQ at
+https://www.contributor-covenant.org/faq. Translations are available at
+https://www.contributor-covenant.org/translations.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..89369b0
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,10 @@
+# Contributing
+
+We welcome contributions to Stream Sprout.
+
+- Help other Quickemu users by answering questions in the [Quickemu Discussions](https://github.com/quickemu-project/quickemu/discussions) 🛟
+- Improve the documentation in [this README](https://github.com/wimpys-world/stream-sprout/edit/master/README.md) 📖
+- File bug reports and feature requests in the [Issues](https://github.com/wimpys-world/stream-sprout/issues) 📁
+- Submit [Pull requests](https://github.com/wimpys-world/stream-sprout/pulls) to fix bugs 🐞 or add new features ✨
+ - Commit messages must [conform to the Conventional Commits specification](https://www.conventionalcommits.org/).
+- [Sponsor the project](https://github.com/sponsors/flexiondotorg) 💖
diff --git a/README.md b/README.md
index b97f4e8..3d42f34 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,128 @@
-# stream-sprout
-Local restreaming
+
+

+
+# Stream Sprout
+
+**Restream OBS Studio to multiple destinations with ease**
+
+**Made with 💝 for

&

**
+
+
+
+
+
+
+
+
+
+# Introduction
+
+Stream Sprout uses FFmpeg to re-stream a video source to multiple destinations such as Twitch, YouTube, and Owncast.
+
+## Get Started
+
+- [Install](#installation) Stream Sprout
+- [Configure](#configuration) Stream Sprout
+- [Configure](#configure-obs-studio) OBS Studio
+- Start `stream-sprout`
+- Click the *Start Streaming* button in OBS Studio
+
+## Installation
+
+### Debian / Ubuntu
+
+- tbc
+
+### NixOS
+
+- tbc
+
+### From source
+
+You need to have [FFmpeg](https://ffmpeg.org/) and [yq](https://github.com/mikefarah/yq) installed on your system.
+
+```bash
+git clone https://github.com/wimpysworld/stream-sprout.git
+cd stream-sprout
+```
+
+## Configure Stream Sprout
+
+Copy the [example Stream Sprout configuration](https://github.com/wimpysworld/stream-sprout/blob/main/stream-sprout.yaml.example) file and edit it to suit your needs.
+
+`services:` are arbitrarily named. Just create an entry for each RTMP destination you want to stream to.
+
+```yaml
+services:
+ my-rtmp-destination:
+ enabled: true
+ rtmp_server: "rtmp://rtmp.example.com/live/"
+ key: "my_super_secret_stream_key"
+```
+
+### Trovo
+
+Here's are example configurations for Trovo.
+
+```yaml
+services:
+ trovo:
+ enabled: false
+ rtmp_server: "rtmp://livepush.trovo.live/live/"
+ key: ""
+```
+
+### Twitch
+
+Here's are example configurations for Twitch.
+
+```yaml
+services:
+ twitch:
+ enabled: true
+ rtmp_server: "rtmp://live.twitch.tv/app/"
+ key: ""
+```
+
+#### Ingest servers
+
+The example configuration uses the primary Twitch ingest server, which is `rtmp://live.twitch.tv/app/`. If you want to optimise your stream quality, you can use a server closer to your location. A short list of recommended servers based on your location is available from [Recommended Ingest Endpoints For You](https://help.twitch.tv/s/twitch-ingest-recommendation).
+
+You can find a complete list of Twitch ingest servers from .
+
+#### Testing
+
+If you want to test streaming to Twitch without going live, you can use the `?bandwidthtest=true` query parameter.
+
+Add `?bandwidthtest=true` to the end of your Twitch stream key, this will enable bandwidth testing, which you can monitor at , and the stream will not go live on your channel.
+
+### YouTube
+
+Here's are example configurations for YouTube.
+
+```yaml
+services:
+ youtube:
+ enabled: true
+ rtmp_server: "rtmp://a.rtmp.youtube.com/live2/"
+ key: ""
+```
+
+## Configure OBS Studio
+
+- Open OBS Studio
+- Go to `Settings` > `Stream`
+- Select `Custom` from the `Service` dropdown
+- Copy the server `url:` from your Stream Sprout configuration to the `Server` field:
+ - `rtmp://127.0.0.1:1935`
+
+## References
+
+These are some of the references used to create this project:
+
+ - https://trac.ffmpeg.org/wiki/EncodingForStreamingSites
+ - https://ffmpeg.org/ffmpeg-protocols.html#rtmp
+ - https://ffmpeg.org/ffmpeg-formats.html#flv
+ - https://ffmpeg.org/ffmpeg-formats.html#tee-1
+ - https://obsproject.com/forum/resources/obs-studio-stream-to-multiple-platforms-or-channels-at-once.932/
+ - https://stackoverflow.com/questions/16658873/how-to-minimize-the-delay-in-a-live-streaming-with-ffmpeg
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..40b6e01
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,18 @@
+# Security Policy
+
+## Supported Versions
+
+Here are the versions of Stream Sprout currently being supported with security updates.
+
+| Version | Supported |
+| ------- | ------------------ |
+| 0.1.x | :white_check_mark: |
+| < 0.0 | :x: |
+
+## Reporting a Vulnerability
+
+If you discover a vulnerability then [file an issue](https://github.com/wimpys-world/stream-sprout/issues/new) and click *Report a vulnerability*.
+
+- Stream Sprout is a spare-time hobby project.
+- We do not have SLAs for responding to security issues.
+- It is a best-efforts basis.