Skip to content

v0.1.2c

Choose a tag to compare

@Hailey-Ross Hailey-Ross released this 18 Jun 13:55
5ddf771

v0.1.2c -- 2026-06-18

Post-release patches (no functional change; deploy behaviour is identical):

  • Unnecessary code comments removed across 10 source files (Go handlers and TypeScript); deploy.ps1 local helper renamed from FileHash to Get-LocalFileHash to resolve a PSScriptAnalyzer warning.
  • Credits page API tab corrected: "four endpoints" fixed to reflect the actual seven rate-limited endpoints; events 30-minute refresh cadence added to the cache note; new Community Data section documenting /api/awards, /api/awards/of/{username}, and /api/shinies/of/{username}; POST /api/refresh added to the Private API table.

This release gives the Raid Finder its own page, adds shiny collection display
to trainer cards with a matching privacy toggle, and fixes a parser regression
in the game data layer. The only database change is a single ALTER TABLE to
add the shinies_hidden column; everything else is a drop-in deploy.


What's in this release

Raid Finder -- dedicated page at /raidfinder

  • The Raid Finder has moved from the Trainers page tab to its own route at
    /raidfinder; a nav link appears automatically when RaidFinderEnabled is
    on in the admin Pages tab
  • Logged-out visitors see the full page content blurred behind a frosted-glass
    overlay with Login and Sign Up prompts -- the UI is visible but not interactive
  • Logged-in users who have not yet set a Trainer Name and Trainer Code see a red
    warning banner explaining they cannot join raids until the profile is updated,
    with a direct link to Settings
  • The Trainer Directory page (/trainers) is now a single-section layout; the
    Raid Finder tab has been removed from it entirely
  • See Raid Finder
    on the wiki for full usage documentation

Shiny collection on trainer cards

  • Trainer cards in the directory now show a collapsible My Collection section
    at the bottom of the profile modal; clicking it expands inline to show the
    trainer's full shiny collection with sprites, form badges, and capture methods
  • The section only appears when the trainer's profile is public and they have not
    opted out; see Privacy below
  • A new Hide shiny collection toggle in Settings > Privacy lets any user
    opt out without affecting the rest of their public profile
  • New public endpoint GET /api/shinies/of/{username} backs this feature;
    it returns an empty array when the profile is private or the toggle is on
  • Requires migration step 26 (one ALTER TABLE; see Migrating below)
  • See Shiny Tracking
    and Trainer Directory

Translator workspace

  • No new changes to the translator workflow in this release; it shipped in
    v0.1.2b and is fully operational
  • Fresh installs: the application flow, workspace, admin review queue, and
    GitHub sync are all available out of the box after running schema.sql
  • See Translator Workspace
    for the full setup and usage guide, including the two environment variables
    required for GitHub sync (GITHUB_TOKEN, GITHUB_REPO)

Internal fix -- max battles endpoint

  • The game data layer (internal/pogodata/pogodata.go) was returning an error
    when no Max Battles were active because the upstream API returns a flat JSON
    array in that case instead of the expected tier-keyed object; both shapes are
    now handled correctly

Fresh install from this release

These steps are self-contained. The wiki covers each topic in greater
depth -- see the Documentation section at the bottom.

Prerequisites

Requirement Minimum version
Go 1.25
Node.js + npm 18
MySQL 8.0
OpenSSH client any (deploy only)

No C toolchain needed (CGO_ENABLED=0).

1. Clone at this tag

git clone --branch v0.1.2c https://github.com/Hailey-Ross/hailsDotGO.git
cd hailsDotGO
npm install

2. Configure environment

cp .env.example .env

Edit .env and set at minimum:

Variable Required Notes
DB_HOST Yes e.g. localhost:3306
DB_USER Yes MySQL username
DB_PASS Yes MySQL password
DB_NAME Yes e.g. hailsdotgo
SUPERADMIN_USER Yes Exact username you will register first
CSRF_KEY Strongly recommended 64 hex chars: openssl rand -hex 32
PORT No Default 8080
PAYPAL_* Store only Omit entirely if not using the store
GITHUB_TOKEN / GITHUB_REPO Translation sync only Omit if not using GitHub locale sync

3. Create the database

Use schema.sql for all fresh installs. Do not run migrate.sql on a fresh
install -- it is for upgrading existing deployments only.

mysql -u your_db_user -p < schema.sql

schema.sql creates the database (hailsdotgo), all tables (including
shinies_hidden from this release), and seeds site_settings, store_items,
awards, and locales. Registration is seeded closed; all feature pages are
seeded enabled.

4. Build

# TypeScript bundles -> static/js/
npm run build

# Go binary (current platform)
go build -o hailsDotGO .

Cross-compile for Linux from Windows or macOS:

GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-s -w" -o hailsDotGO-linux .

5. Run

Export your .env values, then:

# bash
set -a; source .env; set +a
./hailsDotGO

Visit http://localhost:8080. On first start the server fetches game data from
upstream sources; if they are unreachable it falls back to embedded snapshot data.

6. Bootstrap the superadmin account

SUPERADMIN_USER must be set to the exact username you plan to register.

-- Temporarily open registration
UPDATE site_settings SET setting_value = '1' WHERE setting_key = 'registration_open';

Register at /register using that username, then close registration again from
the admin panel at /admin (or set the value back to '0' in SQL).

7. Deploy to a server (optional)

Run deploy/setup.sh once on the server as root, then run deploy.ps1 from
Windows (reads .env, cross-compiles, uploads via SSH with SHA256 manifest
diffing). See the Deployment wiki page for the full walkthrough.


Migrating to v0.1.2c from v0.1.2b

Important: Run the database migration BEFORE deploying the new binary.
The new binary expects the schema to be up to date; running an old binary
against a new schema is also unsupported.

From v0.1.2b

One new section since v0.1.2b:

Section What it adds
26 shinies_hidden column on users -- privacy flag for the shiny collection

Copy and run section 26 from migrate.sql against your live database:

-- 26. Shiny collection privacy flag (2026-06-18)
ALTER TABLE users ADD COLUMN shinies_hidden TINYINT(1) NOT NULL DEFAULT 0 AFTER directory_hidden;

Existing users default to 0 (collection visible), which matches the previous
behaviour. Users can opt out at any time via Settings > Privacy.

From v0.1.1a or earlier

Apply all 26 sections in migrate.sql in order. Sections are numbered and
sequential; do not skip any.

After the migration: update and rebuild

git fetch --tags
git checkout v0.1.2c
npm install
npm run build
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-s -w" -o hailsDotGO-linux .
# then deploy as normal

Security notes

  • Set CSRF_KEY -- all state-changing endpoints enforce the CSRF token;
    the key should be 64 random hex characters. If unset the server falls back to
    a zero key, which is insecure in production. Generate one with
    openssl rand -hex 32.
  • Privacy flags are enforced server-side -- shinies_hidden, profile_public,
    and directory_hidden are all checked in the handler before any data is
    returned; the API always returns an empty result rather than an error, so
    callers cannot distinguish "hidden" from "does not exist".
  • The translator workspace requires a scoped token -- if you enable GitHub
    sync, use a fine-grained personal access token with Contents and Pull requests
    read/write scopes on the one repository only; do not use a classic token with
    broad repository access.
  • See Configuration
    and Accounts and Roles
    for the full variable reference and role/permission model.

Documentation

As of 2026-06-18, the wiki is fully current with this release.
Every topic below has been reviewed against the v0.1.2c codebase. If you are
reading this in the future, the wiki may have evolved; the steps above are
self-contained and do not depend on the wiki being current.

Topic Wiki page
Full setup walkthrough Getting Started
All environment variables Configuration
Schema, migrations, and backups Database Guide
Server provisioning and deploy scripts Deployment
TypeScript build pipeline Building and Development
Roles, staff, and superadmin Accounts and Roles
Admin panel guide Admin Guide
Raid Finder Raid Finder
Trust system and awards Trust and Awards
Shiny Dex and personal collection Shiny Tracking
Trainer Directory and trainer cards Trainer Directory
Translator application and workspace Translator Workspace
Day-2 operations Operations
Public JSON API API Reference