Skip to content

Commit e3b5012

Browse files
committed
Create documentation & update README.md
1 parent a3001ff commit e3b5012

12 files changed

Lines changed: 1761 additions & 41 deletions

File tree

README.md

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,55 +3,42 @@
33
TigerBug
44
</h1>
55

6-
<p align="center"><strong>The open source bug reporting system designed specifically for video game development teams.</strong></p>
6+
<p align="center"><strong>A simple bug tracker built for game developers.</strong></p>
77

8-
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
9-
[![Node.js](https://img.shields.io/badge/node.js-22+-green.svg)](https://nodejs.org)
10-
[![SQLite](https://img.shields.io/badge/database-SQLite-003B57.svg)](https://sqlite.org)
8+
[![Contributors][contributors-shield]][contributors-url]
9+
[![Forks][forks-shield]][forks-url]
10+
[![Stargazers][stars-shield]][stars-url]
11+
[![MIT License][license-shield]][license-url]
1112

12-
---
13-
14-
### 💡 Why we built TigerBug
13+
## Why we built this
1514

16-
As game developers ourselves, we were frustrated with existing bug tracking solutions.
17-
Enterprise solutions like Jira felt overwhelming for our use cases, while simple tools lacked the features we needed.
18-
We couldn't find a tool that:
15+
We needed a bug tracker that didn't suck for game development. Most tools are built for web apps and don't handle the stuff we actually need - like sharing save files, crash logs, and screenshots.
1916

20-
- **Understood our game development workflows** - Most tools were built for web development, not games
21-
- **Made it easy to share gameplay footage and save files** - Essential for reproducing game bugs
22-
- **Gather feedback from players** - We needed a way to involve our community in bug reporting
17+
Jira is overkill and expensive. GitHub Issues is too basic. Everything else either costs too much or doesn't understand game development workflows.
2318

24-
So we built TigerBug - our custom-made solution that combines the best of everything we wanted in a bug tracker,
25-
tailored specifically for game development teams.
19+
So we built our own. It's got the basics done right:
2620

27-
### 🎯 Core Features
28-
29-
- **🏗️ Project-based Organization** - Organize bugs by game project
30-
- **🔐 Flexible Authentication** - Email/password or OAuth (Google, GitHub) - your choice
31-
- **💬 Rich Commenting System** - Thread discussions with file attachments for screenshots, logs, and saves
32-
- **👍 Community Voting** - Let your team and players upvote the most critical issues
33-
- **📧 Smart Notifications** - Stay informed via email when issues change or receive comments
34-
- **📎 File Attachments** - Upload crash logs, screenshots, save files, and reproduction steps
21+
- Project organization (one tracker per game)
22+
- File uploads for screenshots, logs, save files, whatever
23+
- Comments and discussions on issues
24+
- Voting so you know what actually matters
25+
- Email notifications that don't spam you
26+
- OAuth login (Google, Discord) or just email/password
3527

3628
![Screenshot of detail view](https://i.imgur.com/aWbUzUP.png)
3729

38-
### 🐛 Issue Tracking for Games
39-
40-
Every bug report in TigerBug is designed to capture the full context of the issue:
30+
## How it works
4131

42-
- **Clear titles and descriptions** help everyone understand the issue
43-
- **Priority through voting** - let the team highlight what breaks the game experience
44-
- **Rich discussions** with threaded comments and file uploads
32+
Each bug report has a title, description, priority level, and status. People can comment with attachments, vote on what's important, and discuss solutions. Nothing fancy, just the stuff you actually need.
4533

4634
![Screenshot of new issue](https://i.imgur.com/Ak2Qupw.png)
4735

4836
![Screenshot of kanban view](https://i.imgur.com/5MME37b.png)
4937

50-
### 🐳 Quick Start with Docker
38+
## Running it
5139

52-
The easiest way to get TigerBug running is with Docker Compose:
40+
Easiest way is with Docker:
5341

54-
#### docker-compose.yml
5542
```yaml
5643
services:
5744
tigerbug:
@@ -61,22 +48,39 @@ services:
6148
volumes:
6249
- ./data:/app/server/data
6350
environment:
64-
- JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
51+
- JWT_SECRET=change-this-to-something-random
6552
- JWT_EXPIRES_IN=7d
6653
restart: unless-stopped
6754
```
6855
69-
### Why is there no Issues tab?
56+
Then go to http://localhost:9840 and create your admin account.
7057
71-
This project has been made to meet our specific needs.
72-
We don't have the time and resources to maintain this project as a full-fledged issue tracker.
73-
Feel free to fork and modify it for your own use cases.
74-
For critical issues, please contact us directly at [contact@twobit-games.com](mailto:contact@twobit-games.com).
58+
## Issues and support
7559
76-
### 📄 License
60+
We built this for our own use and open-sourced it in case it's useful to others. We don't have time to maintain it as a full project, so there's no Issues tab here.
7761
78-
TigerBug is open source software licensed under the MIT License. See [LICENSE](LICENSE) for details.
62+
If you find a critical bug, email us at [contact@twobit-games.com](mailto:contact@twobit-games.com). Otherwise, feel free to fork it and make it work for your needs.
63+
64+
## License
65+
66+
MIT License - see [LICENSE](LICENSE) for details.
7967
8068
---
8169
82-
**Built with ❤️ by TwoBit Games**
70+
Built with ❤️ by TwoBit Games
71+
72+
[contributors-shield]: https://img.shields.io/github/contributors/TwoBitGames/TigerBug.svg?style=for-the-badge
73+
74+
[contributors-url]: https://github.com/TwoBitGames/TigerBug/graphs/contributors
75+
76+
[forks-shield]: https://img.shields.io/github/forks/TwoBitGames/TigerBug.svg?style=for-the-badge
77+
78+
[forks-url]: https://github.com/TwoBitGames/TigerBug/network/members
79+
80+
[stars-shield]: https://img.shields.io/github/stars/TwoBitGames/TigerBug.svg?style=for-the-badge
81+
82+
[stars-url]: https://github.com/TwoBitGames/TigerBug/stargazers
83+
84+
[license-shield]: https://img.shields.io/github/license/TwoBitGames/TigerBug.svg?style=for-the-badge
85+
86+
[license-url]: https://github.com/TwoBitGames/TigerBug/blob/master/LICENSE

docs/.vitepress/config.mjs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import {defineConfig} from 'vitepress'
2+
3+
export default defineConfig({
4+
title: 'TigerBug',
5+
description: 'Lightweight game-focused issue tracker',
6+
cleanUrls: true,
7+
head: [
8+
['link', {rel: 'icon', type: 'image/png', href: '/favicon.png'}]
9+
],
10+
themeConfig: {
11+
logo: '/favicon.png',
12+
siteTitle: 'TigerBug',
13+
search: {
14+
provider: 'local'
15+
},
16+
nav: [
17+
{text: 'Guide', link: '/guide/getting-started'},
18+
{text: 'Configuration', link: '/configuration/environment-variables'}
19+
],
20+
sidebar: {
21+
'/guide/': [
22+
{
23+
text: 'Guide',
24+
items: [
25+
{text: 'Getting Started', link: '/guide/getting-started'}
26+
]
27+
}
28+
],
29+
'/configuration/': [
30+
{
31+
text: 'Configuration',
32+
items: [
33+
{text: 'Environment Variables', link: '/configuration/environment-variables'},
34+
{text: 'SMTP & Email', link: '/configuration/email-smtp'},
35+
{text: 'OAuth', link: '/configuration/oauth'},
36+
]
37+
}
38+
]
39+
},
40+
editLink: {
41+
pattern: 'https://github.com/TwoBitGames/TigerBug/edit/main/docs/:path',
42+
text: 'Edit this page on GitHub'
43+
},
44+
socialLinks: [
45+
{icon: 'github', link: 'https://github.com/TwoBitGames/TigerBug'}
46+
],
47+
footer: {
48+
message: 'MIT License',
49+
copyright: '© 2025 TwoBit Games'
50+
}
51+
}
52+
})

docs/.vitepress/theme/custom.css

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
:root {
2+
--vp-c-default-1: var(--vp-c-gray-1);
3+
--vp-c-default-2: var(--vp-c-gray-2);
4+
--vp-c-default-3: var(--vp-c-gray-3);
5+
--vp-c-default-soft: var(--vp-c-gray-soft);
6+
7+
--vp-c-brand-1: hsl(31, 71%, 52%);
8+
--vp-c-brand-2: hsl(31, 71%, 60%);
9+
--vp-c-brand-3: hsl(31, 71%, 48%);
10+
--vp-c-brand-soft: hsla(31, 71%, 52%, 0.14);
11+
12+
--vp-c-tip-1: var(--vp-c-brand-1);
13+
--vp-c-tip-2: var(--vp-c-brand-2);
14+
--vp-c-tip-3: var(--vp-c-brand-3);
15+
--vp-c-tip-soft: var(--vp-c-brand-soft);
16+
17+
--vp-c-warning-1: var(--vp-c-yellow-1);
18+
--vp-c-warning-2: var(--vp-c-yellow-2);
19+
--vp-c-warning-3: var(--vp-c-yellow-3);
20+
--vp-c-warning-soft: var(--vp-c-yellow-soft);
21+
22+
--vp-c-danger-1: var(--vp-c-red-1);
23+
--vp-c-danger-2: var(--vp-c-red-2);
24+
--vp-c-danger-3: var(--vp-c-red-3);
25+
--vp-c-danger-soft: var(--vp-c-red-soft);
26+
}
27+
28+
.dark {
29+
--vp-c-brand-1: hsl(31, 71%, 65%);
30+
--vp-c-brand-2: hsl(31, 71%, 70%);
31+
--vp-c-brand-3: hsl(31, 71%, 60%);
32+
--vp-c-brand-soft: hsla(31, 71%, 65%, 0.16);
33+
}
34+
35+
/**
36+
* Component: Button
37+
* -------------------------------------------------------------------------- */
38+
39+
:root {
40+
--vp-button-brand-border: transparent;
41+
--vp-button-brand-text: var(--vp-c-white);
42+
--vp-button-brand-bg: var(--vp-c-brand-3);
43+
--vp-button-brand-hover-border: transparent;
44+
--vp-button-brand-hover-text: var(--vp-c-white);
45+
--vp-button-brand-hover-bg: var(--vp-c-brand-2);
46+
--vp-button-brand-active-border: transparent;
47+
--vp-button-brand-active-text: var(--vp-c-white);
48+
--vp-button-brand-active-bg: var(--vp-c-brand-1);
49+
}
50+
51+
/**
52+
* Component: Home
53+
* -------------------------------------------------------------------------- */
54+
55+
:root {
56+
--vp-home-hero-name-color: transparent;
57+
--vp-home-hero-name-background: -webkit-linear-gradient(
58+
120deg,
59+
var(--vp-c-brand-1) 30%,
60+
var(--vp-c-brand-2)
61+
);
62+
63+
--vp-home-hero-image-background-image: linear-gradient(
64+
-45deg,
65+
var(--vp-c-brand-1) 50%,
66+
var(--vp-c-brand-2) 50%
67+
);
68+
--vp-home-hero-image-filter: blur(44px);
69+
}
70+
71+
@media (min-width: 640px) {
72+
:root {
73+
--vp-home-hero-image-filter: blur(56px);
74+
}
75+
}
76+
77+
@media (min-width: 960px) {
78+
:root {
79+
--vp-home-hero-image-filter: blur(68px);
80+
}
81+
}
82+
83+
/**
84+
* Component: Custom Block
85+
* -------------------------------------------------------------------------- */
86+
87+
:root {
88+
--vp-custom-block-tip-border: transparent;
89+
--vp-custom-block-tip-text: var(--vp-c-text-1);
90+
--vp-custom-block-tip-bg: var(--vp-c-brand-soft);
91+
--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);
92+
}
93+
94+
/**
95+
* Component: Algolia
96+
* -------------------------------------------------------------------------- */
97+
98+
.DocSearch {
99+
--docsearch-primary-color: var(--vp-c-brand-1) !important;
100+
}

docs/.vitepress/theme/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import DefaultTheme from 'vitepress/theme'
2+
import './custom.css'
3+
4+
export default DefaultTheme

docs/configuration/email-smtp.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Email Setup
2+
3+
TigerBug sends emails for account verification, notifications, and other important stuff. Here's how to get it working.
4+
5+
## What needs email
6+
- New account verification
7+
- Welcome messages
8+
- Issue and comment notifications
9+
- Assignment alerts
10+
- Test emails (to make sure everything works)
11+
12+
## Setting it up
13+
Go to Admin Dashboard → SMTP Configuration and fill in:
14+
- **Host**: Your email server (like smtp.gmail.com)
15+
- **Port**: Usually 465 for secure connections
16+
- **Username & Password**: Your email credentials
17+
- **From Address**: What shows up as the sender
18+
- **Use TLS**: Check this unless you have certificate issues
19+
20+
Hit save and TigerBug will test the connection. Check the logs to see if it worked.
21+
22+
## Testing
23+
Use the test email form in the admin panel to make sure everything's working before your users need it.
24+
25+
## When things go wrong
26+
| Problem | Usually means | Try this |
27+
|---------|-------|-----|
28+
| Connection timeout | Firewall or wrong server | Test with `nc -vz yourhost 465` |
29+
| Certificate errors | Self-signed or bad SSL | Uncheck "Use TLS" or fix your certificates |
30+
| Authentication failed | Wrong username/password | Double-check your credentials |
31+
32+
Most email providers have specific setup guides - Gmail, Outlook, etc. all work fine.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Environment Variables
2+
3+
Here's what you can configure when running TigerBug. Most of these have sensible defaults, but you'll want to set a few
4+
for production.
5+
6+
| Variable | Required | Default | What it does |
7+
|----------------|----------|--------------------------------------------------------------|-------------------------------------------------------------------------|
8+
| PORT | No | 9840 | Which port the server runs on |
9+
| CLIENT_URL | No | http://localhost:5173 (dev) / http://localhost:9840 (Docker) | The URL people will use to access TigerBug (needed for emails and CORS) |
10+
| JWT_SECRET | Yes | (none) | A secret key for login tokens - make this random and keep it safe! |
11+
| JWT_EXPIRES_IN | No | 7d | How long people stay logged in (1d = 1 day, 7d = 1 week, etc.) |
12+
| UPLOAD_PATH | No | /app/server/data/attachments | Where uploaded files get stored |
13+
| NODE_ENV | No | development | Set to "production" to hide debug info from users |
14+
15+
## Email Setup
16+
17+
Email gets configured through the admin UI, not environment variables. Much easier that way.
18+
19+
## How it works
20+
21+
The server uses your `CLIENT_URL` setting to handle CORS and serve the web interface from the built files.

docs/configuration/oauth.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# OAuth Login Providers
2+
3+
Let people log in with Google, GitHub, Discord, or other services instead of creating yet another password.
4+
5+
## Setting it up
6+
7+
1. Go to Admin Dashboard → OAuth
8+
2. For each provider you want (Google, GitHub, etc.):
9+
- **Client ID & Secret**: Get these from the provider's developer console
10+
- **Scope**: What permissions to ask for (provider-specific)
11+
- **Callback URL**: Copy this and paste it into the provider's settings
12+
- **Enable/Disable**: Turn providers on and off
13+
3. Hit Save
14+
15+
## How it works
16+
17+
The login page pulls the list of enabled providers and shows nice branded buttons for each one.
18+
19+
Each provider stores its config in the database, so you can manage everything through the admin UI.

0 commit comments

Comments
 (0)