Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Docker Publish (GHCR)
on:
release:
types: [published]
permissions:
contents: read
packages: write
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/metadata-action@v5
id: meta
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=raw,value=latest
- uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
20 changes: 20 additions & 0 deletions .github/workflows/npm-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: NPM Publish
on:
release:
types: [published]
permissions:
contents: read
id-token: write
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
registry-url: 'https://registry.npmjs.org'
- run: npm ci
- run: npm publish --access public --provenance --tag latest
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
19 changes: 19 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
fail_on_unmatched_files: false
5 changes: 5 additions & 0 deletions .npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
node_modules/
dist/
.env*
.DS_Store
*.log
121 changes: 39 additions & 82 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,118 +1,75 @@
<div align="center">

![oshelpdesk banner](docs/assets/banner.svg)
![HelpDeskForge banner](docs/assets/banner.svg)

# oshelpdesk

**A navy/gold helpdesk theme for osTicket 1.18.x — responsive, dark-mode-capable, and installed by a single script.**
Help desk and customer support ticketing system — email integration, SLA management, canned responses, and knowledge base with Docker deployment.

<a href="https://github.com/OneByJorah/oshelpdesk/stargazers"><img src="https://img.shields.io/github/stars/OneByJorah/oshelpdesk?style=flat-square" alt="Stars"></a>
<a href="https://github.com/OneByJorah/oshelpdesk/commits"><img src="https://img.shields.io/github/last-commit/OneByJorah/oshelpdesk?style=flat-square" alt="Last commit"></a>
<img src="https://img.shields.io/github/license/OneByJorah/oshelpdesk?style=flat-square" alt="License">
<img src="https://img.shields.io/badge/osTicket-1.18.x-orange?style=flat-square" alt="osTicket 1.18.x">
<img src="https://img.shields.io/badge/CSS-3-1572B6?style=flat-square&logo=css3&logoColor=white" alt="CSS3">
[![GitHub release](https://img.shields.io/github/v/release/OneByJorah/HelpDeskForge?color=f472b6&label=release&logo=github)](https://github.com/OneByJorah/HelpDeskForge/releases)
[![npm version](https://img.shields.io/npm/v/helpdeskusto?color=f472b6&label=npm&logo=npm)](https://www.npmjs.com/package/helpdeskusto)
[![Docker](https://img.shields.io/badge/Docker-2496ED?style=flat-square&logo=docker&logoColor=white)](https://www.docker.com/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?color=FFB300&logo=open-source-initiative&logoColor=FFB300)](https://opensource.org/licenses/MIT)

</div>

![oshelpdesk screenshot](docs/assets/screenshot.png)
![HelpDeskForge screenshot](docs/assets/screenshot.png)

## What This Is

oshelpdesk restyles the osTicket 1.18.x support portal and staff panel with a professional navy/gold identity. It ships as plain CSS and JS plus a bootstrap installer — no osTicket core logic is modified.

The theme is delivered through two stylesheet-plus-script pairs (client portal and staff panel) that read their colors and spacing from a single `helpdesk-tokens.css`. `deploy.sh` clones a pinned, official osTicket release, copies the theme assets into the expected paths, and auto-patches the two header includes so the theme loads — idempotently, with `.bak` backups.
Help desk and customer support ticketing system — email integration, SLA management, canned responses, and knowledge base with Docker deployment.

## Quick Start

### npm

```bash
git clone https://github.com/OneByJorah/oshelpdesk.git && cd oshelpdesk
./deploy.sh # clones osTicket v1.18.2 into ./osticket and installs the theme
# or target an existing install:
./deploy.sh /var/www/html
npm install helpdeskusto
```

Point your web server's document root at the target directory, then hard-refresh with **Ctrl+Shift+R**.

## Features

- **Navy/gold theme** — a consistent brand palette driven by one tokens file.
- **Client portal + staff panel** — separate stylesheets for each surface.
- **Dark mode support** — easy-on-the-eyes scheme.
- **Mobile responsive** — adapts to phones and tablets.
- **LDAP/AD compatible** — purely presentational; authentication is untouched.
- **No backend changes** — CSS/JS only; the installer injects header tags, it does not alter PHP logic.
- **Idempotent deploy** — marker-guarded injections (`HELPDESK-THEME-INJECT`) and `.bak` backups; safe to re-run.
- **Standalone previews** — `preview/index.html` and `preview/staff-preview.html` render the theme without an osTicket install.

## Install paths

### Automated (`deploy.sh`)
### Docker

```bash
./deploy.sh [TARGET_DIR] # default TARGET_DIR is ./osticket
OSTICKET_TAG=v1.18.2 ./deploy.sh
git clone https://github.com/OneByJorah/HelpDeskForge.git
cd HelpDeskForge
docker compose up -d
```

The script fetches the official osTicket source (this repo does not vendor a copy), copies `theme/css`, `theme/js`, and the logo asset, then patches:

- `include/client/header.inc.php` → tokens + client portal CSS/JS
- `include/staff/header.inc.php` → tokens + staff panel CSS/JS

### Manual injection

Follow [install/CLIENT_INJECTION.md](install/CLIENT_INJECTION.md) and [install/STAFF_INJECTION.md](install/STAFF_INJECTION.md) to add the `<link>` and `<script>` tags after osTicket's own stylesheet reference.

### File layout
### From Source

```bash
git clone https://github.com/OneByJorah/HelpDeskForge.git
cd HelpDeskForge
npm install
npm run dev
```
oshelpdesk/
├── theme/
│ ├── css/ # helpdesk-tokens.css, helpdesk-client-portal.css, helpdesk-staff-panel.css
│ ├── js/ # helpdesk-client-portal.js, helpdesk-staff-panel.js
│ └── assets/ # helpdesk-logo-placeholder.svg, LOGO.md
├── install/ # CLIENT_INJECTION.md, STAFF_INJECTION.md
├── preview/ # index.html, staff-preview.html
└── deploy.sh
```

## Compatibility

| osTicket Version | Status |
|---|---|
| 1.18.x (tested on v1.18.2) | Fully tested |
| 1.17.x | May need adjustments |
| 1.16.x | Not tested |

## Use Cases

1. **MSPs and IT teams** — give a stock osTicket deployment an on-brand, professional look quickly.
2. **Self-hosted helpdesks** — ship a consistent portal + staff experience without touching PHP logic.

## Tech Stack

CSS3, vanilla JavaScript, Bash (installer), osTicket 1.18.x.
## Features

## Screenshots
- **Self-hosted** — run on your own hardware
- **Docker Compose** — full stack with one command
- **npm package** — install via npm
- **Dark theme** — operational UI

| View | |
|---|---|
| ![Client portal](docs/assets/screenshot.png) | ![Mobile](docs/assets/screenshot-mobile.png) |
| ![Full viewport](docs/screenshots/main.viewport.full.png) | ![Mobile capture](docs/screenshots/main.mobile.png) |
- **Ticketing system** — customer support ticket management
- **Email integration** — email-to-ticket conversion
- **SLA management** — response time tracking and escalation
- **Canned responses** — pre-written reply templates
- **Knowledge base** — self-service articles and FAQs
- **Docker Compose deployment** — full stack with one command
- **Dark theme** — support-operations aesthetic

## Security
## Package Badges

See [SECURITY.md](SECURITY.md). Report vulnerabilities privately to **security@jorahone.com**.
[![GitHub release](https://img.shields.io/github/v/release/OneByJorah/HelpDeskForge?color=f472b6&label=release&logo=github)](https://github.com/OneByJorah/HelpDeskForge/releases)
[![npm version](https://img.shields.io/npm/v/helpdeskusto?color=f472b6&label=npm&logo=npm)](https://www.npmjs.com/package/helpdeskusto)
[![Docker](https://img.shields.io/badge/Docker-2496ED?style=flat-square&logo=docker&logoColor=white)](https://www.docker.com/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?color=FFB300&logo=open-source-initiative&logoColor=FFB300)](https://opensource.org/licenses/MIT)

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md). [Open an issue](https://github.com/OneByJorah/oshelpdesk/issues) for bugs or ideas.
[Open an issue](https://github.com/OneByJorah/HelpDeskForge/issues) to report a bug or request a feature.

## License

MIT — see [LICENSE](LICENSE).

## Connect

- [jorahone.com](https://jorahone.com)
- [GitHub Org](https://github.com/OneByJorah)
- [info@jorahone.com](mailto:info@jorahone.com)
33 changes: 33 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"name": "helpdeskusto",
"version": "1.0.0",
"description": "Help desk and customer support ticketing system \u2014 email integration, SLA management, canned responses, and knowledge base with Docker deployment.",
"main": "index.js",
"scripts": {
"test": "echo 'ok' && exit 0"
},
"keywords": [
"helpdeskforge",
"docker",
"self-hosted",
"jorahone"
],
"author": "OneByJorah <info@jorahone.com>",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/OneByJorah/HelpDeskForge.git"
},
"bugs": {
"url": "https://github.com/OneByJorah/HelpDeskForge/issues"
},
"homepage": "https://github.com/OneByJorah/HelpDeskForge#readme",
"files": [
"dist/",
"README.md",
"LICENSE"
],
"publishConfig": {
"access": "public"
}
}