Skip to content
Draft
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
2 changes: 1 addition & 1 deletion AddOns/APRS-AutoPos/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,4 @@ The script polls the `aprs.fi` API at the configured interval. If a new position

---

_Developed by DO3EET_
_Developed by DO3EET_ <!-- markdownlint-disable-line MD036 -->
2 changes: 1 addition & 1 deletion AddOns/HFJ350M-Calculator/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,4 @@ The tool also displays the **Sensitivity** (kHz/cm) for each band, helping you u

---

_Developed by DO3EET_
_Developed by DO3EET_ <!-- markdownlint-disable-line MD036-->
2 changes: 1 addition & 1 deletion AddOns/Self_Hosting_Guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,4 @@ Avoid using `*://*/*` as a match pattern. This would allow the script to run on

---

_73 de DO3EET_
_73 de DO3EET_ <!-- markdownlint-disable-line MD036-->
12 changes: 8 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ docker compose up

## Project Structure

```
```text
src/
├── components/ # React UI panels (DXClusterPanel, SolarPanel, etc.)
├── hooks/ # Data fetching hooks (useDXCluster, usePOTASpots, etc.)
Expand Down Expand Up @@ -71,9 +71,11 @@ See an issue you want to fix? Claim it so others know it's being worked on:

1. Find an issue you'd like to work on
2. Leave a comment containing exactly:
```

```text
/assign
```

3. The bot will assign the issue to you and react with 👍

No write access required — any GitHub user can self-assign. Once assigned, feel free to ask questions in the issue thread before diving in. If you claimed something and it's no longer on your radar, just leave a comment so someone else can pick it up.
Expand All @@ -83,9 +85,11 @@ No write access required — any GitHub user can self-assign. Once assigned, fee
Fixed the bug or confirmed a resolution? Close the issue directly:

1. Leave a comment containing exactly:
```

```text
/close
```

2. The bot will close the issue and react with 🚀

### Submitting Code
Expand All @@ -101,7 +105,7 @@ Fixed the bug or confirmed a resolution? Close the issue directly:

Branch off `Staging` and use a descriptive prefix:

```
```text
feature/my-new-panel
fix/pota-frequency-display
docs/update-readme
Expand Down
4 changes: 2 additions & 2 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,10 @@ Adopted year-based versioning: X = year, Y = visual/UI, Z = backend. The jump fr

We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for setup instructions. All PRs target the `Staging` branch.

- **Issues**: https://github.com/accius/openhamclock/issues
- **Issues**: <https://github.com/accius/openhamclock/issues>
- **Discussions**: GitHub Issues or the Community tab in Settings
- **Security**: See [SECURITY.md](SECURITY.md) for vulnerability reporting

---

_Last updated: 2026-03-26_
_Last updated: 2026-03-26_ <!-- markdownlint-disable-line MD036 -->
14 changes: 8 additions & 6 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,14 @@ For vulnerability reports, please use one of the **private channels** below. The

#### Primary: GitHub Private Vulnerability Reporting

- **URL**: https://github.com/accius/openhamclock/security/advisories/new
- **URL**: <https://github.com/accius/openhamclock/security/advisories/new>
- **Advantages**: Structured submission, built-in secure communication, CVE assignment support
- **Expected acknowledgment**: Automated immediate, human review within 7 days

#### Secondary: Encrypted Email

- **Address**: chris@cjhlighting.com
- **PGP Key**: Available at https://github.com/accius.gpg (or keybase.io/accius)
- **Address**: <chris@cjhlighting.com>
- **PGP Key**: Available at <https://github.com/accius.gpg> (or keybase.io/accius)
- **Fingerprint**: `[Will be added - use PGP key for sensitive communications]`
- **Use when**: GitHub reporting is unavailable or for highly sensitive disclosures

Expand Down Expand Up @@ -358,8 +358,8 @@ If you follow this policy, we commit to:

Users and operators can stay informed of security updates via:

- **GitHub Security Advisories**: https://github.com/accius/openhamclock/security/advisories
- **GitHub Releases**: https://github.com/accius/openhamclock/releases (security fixes tagged)
- **GitHub Security Advisories**: <https://github.com/accius/openhamclock/security/advisories>
- **GitHub Releases**: <https://github.com/accius/openhamclock/releases> (security fixes tagged)
- **CHANGELOG.md**: Maintained in the repository
- **Watch/Subscribe**: Enable "Security alerts" in your GitHub repository watch settings

Expand All @@ -370,12 +370,14 @@ When a security update is released:
1. **Review the advisory**: Understand the impact and affected versions
2. **Check your version**: `git log -1 --pretty=format:"%H"` or `grep version package.json`
3. **Update immediately** for Critical/High severity:

```bash
git pull
npm install
npm audit fix
docker-compose up -d --build # if using Docker
```

4. **Verify the fix**: Check that your version includes the patch commit
5. **Monitor for anomalies**: Review logs for signs of prior exploitation

Expand Down Expand Up @@ -439,7 +441,7 @@ This policy will be reviewed and updated:
For questions about this policy (not vulnerability reports):

- **General security questions**: Open a public Discussion on GitHub
- **Policy clarifications**: Email chris@cjhlighting.com (non-confidential)
- **Policy clarifications**: Email <chris@cjhlighting.com> (non-confidential)

For **vulnerability reports**, see **§4 Reporting a Vulnerability**.

Expand Down
8 changes: 5 additions & 3 deletions docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ OpenHamClock is a full-stack JavaScript application:
- **Backend**: Express.js server that proxies 40+ external APIs, manages SSE/WebSocket connections, and serves static files
- **Deployment**: Docker on Railway (production), `npm run dev` for local development

```
```text
┌──────────────────────────────────────────────────────┐
│ Browser (React) │
│ App.jsx → Layout → Panels + WorldMap + Plugins │
Expand All @@ -30,7 +30,7 @@ OpenHamClock is a full-stack JavaScript application:

## Directory Structure

```
```text
openhamclock-main/
├── index.html # Vite entry point → builds to dist/index.html
├── server.js # Express backend (all API routes, SSE, data aggregation)
Expand Down Expand Up @@ -148,7 +148,7 @@ openhamclock-main/

Every data panel follows the same pattern:

```
```text
useXxxSpots.js (hook) → XxxPanel.jsx (component) → Layout.jsx
├── fetch /api/xxx ├── renders data list ├── arranges panels
├── polling interval ├── handles click events └── passes props
Expand All @@ -165,10 +165,12 @@ useXxxSpots.js (hook) → XxxPanel.jsx (component) → Layout.jsx
### Adding a Map Layer Plugin

1. Create `src/plugins/layers/useMyLayer.js` following the plugin interface:

```js
export const meta = { name: 'my-layer', label: 'My Layer', ... };
export const useLayer = ({ map, enabled, config }) => { ... };
```

2. The layer registry auto-discovers it — no manual registration needed
3. See `src/plugins/OpenHamClock-Plugin-Guide.md` for the full API

Expand Down
2 changes: 1 addition & 1 deletion docs/DOCKER.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ cd openhamclock
docker compose up -d
```

Open **http://localhost:3000** — that's it. OpenHamClock runs with sensible defaults.
Open **<http://localhost:3000>** — that's it. OpenHamClock runs with sensible defaults.

## Customize Your Station

Expand Down
2 changes: 1 addition & 1 deletion docs/N1MM-SETUP.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ OpenHamClock can receive live QSO data from N1MM+ (and DXLog) during contests. E

N1MM+ has a built-in feature that broadcasts UDP packets every time you log a contact. OpenHamClock listens for these broadcasts and plots each QSO on the map with band-colored arcs.

```
```text
N1MM+ ──── UDP (port 12060) ────▶ OpenHamClock Server
Expand Down
10 changes: 5 additions & 5 deletions docs/emcomm-roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,14 +121,14 @@ Operators check in to a net by sending an APRS message:

**Check in:**

```
```text
TO: EMCOMM
Body: CQ NETNAME <your status message>
```

**Check out:**

```
```text
TO: EMCOMM
Body: U NETNAME
```
Expand All @@ -139,7 +139,7 @@ Example: Sending `CQ HOTG Deployed to Shelter Alpha` to EMCOMM checks you in to

For operators without APRS TX capability, the server provides a REST endpoint:

```
```text
POST /api/aprs/net/checkin
Body: { "callsign": "W1ABC", "netName": "HOTG", "status": "At EOC" }
```
Expand Down Expand Up @@ -179,7 +179,7 @@ Incoming APRS messages addressed to your callsign appear in the message stream.

### Message Endpoint

```
```text
POST /api/aprs/message
Body: { "to": "W1ABC", "message": "Need water at Shelter B" }
```
Expand Down Expand Up @@ -291,7 +291,7 @@ The rig-bridge includes a Winlink gateway plugin (`rig-bridge/plugins/winlink-ga

## Architecture

```
```text
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐
│ Radio/TNC │────▶│ APRS Daemon │────▶│ OpenHamClock │
│ (Direwolf) │◀────│ (rig-bridge │◀────│ (Node.js) │
Expand Down
2 changes: 1 addition & 1 deletion dxspider-proxy/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ CALLSIGN=YOURCALL npm start

Once deployed, update your OpenHamClock configuration to use this proxy as a DX cluster source:

```
```text
https://your-proxy-url.railway.app/api/dxcluster/spots
```

Expand Down
Loading
Loading