Half-Mind.com complete manual
Documentation edition: 9 September 2026
- How to use Half-Mind.com — new users
- Site user guide
- Site description
- Administration guide
- Site and technical reference
- Content maintenance
- Backup and recovery
- Installation and migration
- Encoding and design
- Troubleshooting
- Release notes
How to use Half-Mind.com — a new user's guide
Half-Mind.com brings together Hash House Harriers club information, community archives and a personal record of your hashing adventures. Start with the section that matches what you want to do.
1. Find a hash near you or your next destination
Choose Find a Hash from the main menu to open the regional directory. Browse the relevant location and follow a kennel's website or contact link. A kennel is a local Hash House Harriers club. Confirm meeting details with the club before travelling: an old listing is not a guarantee of a current run.
You can browse public sections without creating a Where account. Plate photos and songbook archives are separate sections; they are not your personal log.
2. Create your personal Where account
Open Where Have You Hashed? and choose Register Account. Complete the form and follow the email-verification instructions. Check spam if the email does not arrive. Then log in.
Your Where login is for your own records. You do not need a Site Administration password, and registering does not make you a site administrator.
3. Introduce yourself
Choose Profile & Password. Enter your hash name and home kennel, plus the optional profile details you want to provide. Use a consistent kennel spelling: this is how the kennel leaderboard groups participating hashers.
Save and reload to confirm your changes. When editing unrelated information, leave the password-change field blank; if your browser autofills it, clear it. If your installed form behaves unexpectedly, contact the administrator.
4. Record where you have hashed
Choose My Counts, select your countries/territories, US states and events, and use the form's Save/Update button. Reopen the page to confirm the selections. Use Hare Places separately for places where you have laid a trail. Update lifetime hash totals in your profile; selecting a country does not add an individual run to your lifetime total.
Where a checklist search is available, filtering only hides choices. It does not save or remove previously checked entries.
5. See your maps and milestones
Choose My Lists, U.S. Map, World Map or My Milestones. Maps are a visual summary of your saved places. Some small territories appear as markers. A missing highlight may be a map-label mismatch; check My Lists first.
Continent Clubs begin at 3 continents, then 4, 5, 6 and all 7. Each continent counts once, however many countries you selected within it. Australia is included in Oceania, and Antarctica is needed for all seven.
You do not enter the continent total yourself. The site derives it from your selected countries and the administrator's country-to-continent assignments. The nine areas used to organize the country checklist are separate from the seven continents used for these clubs. A country spanning continents receives one assignment under the site's convention.
If the card says Pending or Unavailable, a country may still need classification. Contact the administrator; do not remove a correctly selected country to earn a badge. The world map can also show your highest earned Continent Club.
6. Find your kennel on the leaderboard
On My Milestones, use See where [your kennel] ranks on the Global Kennel Leaderboard, if shown. Or choose Kennel Leaderboards in the Where menu. The search uses the exact kennel name. Tabs compare combined countries, combined states, lifetime hashes and participating hashers.
These are totals from eligible member profiles, not a census of the kennel's membership or a count of its organized runs. Two members who visited the same country each contribute to the combined total.
7. Make your keepsake certificate
Choose Export, then Preview certificate. The latest certificate has an adventure design, your name and kennel, recorded totals, continent names and highest earned Continent Club. Detailed pages list your recorded adventures. Choose Download PDF certificate to keep it, or Download CSV data for a spreadsheet-compatible export.
Exports are for the currently logged-in account. Review the detailed pages before sharing: they can include your bio and favourite memory. The CSV may contain additional personal profile information, including your email.
8. Keep it current
After a trip, update My Counts. After laying trails, update Hare Places. Keep your home kennel and lifetime total current. Save, reload and check the result. Use Logout on a shared device.
For login trouble, choose Forgot Password?. For a site issue, use the site's contact route and provide the page address and what happened, without passwords.
If your screen looks different
This guide describes the latest prepared features. The administrator may still be installing an update. A missing menu item or older certificate design should be reported rather than treated as a mistake in your account.
Visitor and account how-to guide
Find a kennel
Open Find a Hash from the main menu. Choose the relevant location or use the directory's kennel/contact search. Check the listed website and contact before travelling; directory entries may be outdated. Use the listing's edit/report option if present, or the site contact route, to suggest a correction. A dead website does not necessarily mean a club has stopped running.
Create and use a Where account
- Open
/where/and choose Register Account. - Fill in the form and follow the verification email. Check spam if it does not arrive.
- Log in and use My Counts to update countries, states and events.
- Use Hare Places for places where you have hared; use Races for the separate race fields.
- Use the page's Update/Save button, wait for confirmation and reload to verify changes.
Where the checklist enhancement is installed, typing in its filter hides unmatched choices but keeps existing selections. Clearing the filter reveals everything again. Filtering alone does not save data. An unsaved-change warning may appear when leaving an edited form.
Edit your profile
Open Profile & Password. Update your hash name, kennel and other details, then save and reload. Use a consistent kennel spelling to help the kennel leaderboard group members together. The profile's Hash Club field determines the group; it need not be your original mother hash.
A password-change field should be blank when you are not changing the password. If a browser password manager fills it, clear it before saving unrelated edits. A newer profile fix was discussed; confirm your installed form keeps the password unchanged when blank. Do not rely on placeholder text as proof of that behavior.
Hashspace is a legacy field and may not appear on the public Bio page. If it shows an email after reload, browser autofill or a field-binding issue may be involved; report it with the current form source. Do not keep overwriting values to compensate without checking the stored result.
Choose Forgot Password? if you cannot log in. Use the latest recovery email. The Where account password and Site Administration password are separate.
View lists, maps and Bio
My Lists, U.S. Map and World Map display your recorded selections. A missing highlight may mean a map-name mismatch rather than an unsaved selection. Check the list first. For example, Burma needs an alias to Myanmar, and a misspelled country label needs an explicit correction or alias. Do not change the order of the stored country list to fix map names.
The Bio link still uses awhere_blog.php?MyID=...; do not treat that filename as a broken link merely because the visible label changed.
Kennel leaderboards
Choose Kennel Leaderboards under Rankings & reports. Four views rank the top 50 kennel groups by combined countries, combined states, members' lifetime hashes or registered hashers. Only active profiles not marked hidden contribute. Blank and common placeholder kennel names are excluded.
Countries/states are added across members: two people each reporting 10 countries contribute 20 even if their destinations overlap. Lifetime hashes are members' personal totals, not runs organized by that kennel. Registered hashers counts participating profiles, not the club's actual membership or recent activity.
Capitalization and surrounding spaces are grouped; abbreviations and spelling variants remain separate. Equal primary totals share a rank, such as 1, 1, 3. The 50-group limit can cut across a tie.
Plates
Open Plates and search by hasher, kennel or notes where search is installed. With the lightbox enabled, tap a photo to enlarge it without leaving the list. Use Previous/Next or the left/right arrow keys. Close with the Close button, Escape or a tap outside the panel. Open original in new tab allows full-size inspection. Without the enhancement, ordinary image links still work.
To submit a plate or identify one, use the gallery's submission contact link and provide the photo, hasher name, kennel and caption context. An administrator adds it to the gallery; the submission link is not an upload form.
Songbooks
Open Songbooks for the story, cover links, complete PDF and numbered scans. The viewer is /songbook/showpage.php?pg=06, with previous/next and a scan selector. An archival scan is an image, not searchable text. Scan 86 was absent from the supplied archive; navigation skips missing files while retaining original numbering.
The root /showpage.php?pg=06 compatibility file redirects to the actual viewer. It must not be installed inside /songbook/, which would cause a loop.
My Milestones and Continent Clubs
My Milestones shows progress for countries/territories, US states, lifetime hashes and continents. Continents have targets of 3, 4, 5, 6 and 7. Earned clubs remain visible and the page shows the next target.
Continents are calculated from your selected countries, counting each of Africa, Antarctica, Asia, Europe, North America, South America and Oceania once. The old nine checklist areas are not nine continent clubs. The administrator assigns one continent per country/territory; Australia is included in Oceania. Antarctica is required for the All Seven Continents Club.
A pending/unavailable count means a needed classification or lookup is missing. Ask the administrator to review it rather than changing accurate selections. The world-map profile displays the highest earned club and the next target.
Your kennel's global rank
The personalized link on My Milestones opens an exact-name kennel search. It is not displayed for blank or placeholder kennel names. A searched kennel keeps its global rank even if it falls below the normal top-50 display. Tabs preserve the search. Use Show top 50 to return to the general ranking.
If no match is found, check your profile's kennel spelling. A hidden/inactive profile does not contribute to the public grouping. Spelling variants are not automatically merged just because they refer to the same club.
Preview and download your certificate
Choose Export → Preview certificate to open the actual generated PDF in a new tab. Download PDF certificate saves it directly; browser Print is not required. The latest design has a trail motif, Continent Club ribbon, country, state, event, lifetime-hash and continent totals, plus continent names.
The following pages list selected countries, states, events, hared places, and any included bio or favourite memory. Review all pages before sharing. The site logo appears when the server has the existing logo file and image support. The certificate is a keepsake based on your saved record, not an independently verified award.
Long hash names scale to fit. The current PDF handles Western accents; names in other scripts may be transliterated or omitted. Use CSV to retain original UTF-8 text. Pending continent classifications do not prevent the other export information from being available.
Download your records as CSV
On Export choose Download CSV data. Open/import it as UTF-8 in a spreadsheet application. It includes profile fields and separate rows for places/events, continent count, club and continent names. It may contain your registered email and other personal details. Passwords and internal login data are excluded.
Export links belong to your current login session. If a link expires, return to Export and generate it again. You cannot export another user's private records by changing a map's MyID parameter.
Understanding differences in counts
Territories are counted using the site's existing country list. The map's legacy selection handling can differ from My Milestones/Export on older accounts. If totals or continents disagree, report the affected pages and expected selections; do not repeatedly save guesses to compensate.
What is Half-Mind.com?
Half-Mind.com is a community resource for Hash House Harriers: a place to find kennels, explore hashing history and keep a personal record of where you have hashed. It combines a regional club directory, the Where Have You Hashed? travel tracker, rankings, maps and community archives.
Find your next trail
The regional directory helps visitors find local clubs and their contact information. Use it as a starting point, then confirm current run details with the kennel. Listings can change as contacts and club websites change.
Celebrate your hashing adventures
A Where account lets you record countries and territories, US states, events, hared places and profile information. Your saved selections feed lists and maps. Milestones recognize progress, including Continent Clubs at three through seven continents. The world map can display your highest earned club.
The latest export tool creates a landscape adventure certificate with your recorded totals and continents, followed by detailed pages. CSV export provides a spreadsheet-compatible copy of your records.
Discover the community
Individual rankings and kennel leaderboards provide different views of participating hashers' records. Kennel totals combine eligible profiles; they are not independently verified club statistics. License plate photos and songbooks preserve other parts of hashing culture.
Behind the scenes
Site administration brings together maintenance, backups, verification and documentation. A dedicated country editor keeps the seven-continent assignments separate from the nine historical areas used by the directory/checklists.
Half-Mind.com is a PHP/MySQL website. On On Podcast and Running in the 70s are separate WordPress projects, even where the sites link to one another.
Short description for an introduction
Half-Mind.com helps Hash House Harriers find clubs, record their travels and celebrate their hashing adventures. Explore kennel listings, personal maps, rankings, Continent Clubs, keepsake certificates, plate photos and songbooks.
Scope of this description
Prepared September 9, 2026 from supplied source and completed update packages. Feature descriptions do not certify that every latest file is installed on the live site. Member records are self-reported, and public directory details should be confirmed with the relevant club.
Half-Mind administration guide
Updated 9 September 2026. Start at /siteadmin/. This guide covers the PHP Half-Mind site; On On Podcast and Running in the 70s have separate WordPress administration.
Everyday tasks
| Task | Where to go | Completion check |
|---|---|---|
| Review maintenance tools | /siteadmin/ |
Correct dashboard and current admin menu appear |
| Make backups | /siteadmin/backup.php |
Download and restore-test the appropriate backup |
| Check a release | /siteadmin/verify.php |
Review changed files and rerun database checks |
| Read these guides | /siteadmin/docs.php |
Choose a guide; download its editable source if needed |
| Audit encoding | /siteadmin/encoding.php |
Run the three separate checks and retain reports |
| Review directory quality | /regionalwebsite/directory_health.php |
Investigate findings before changing records |
| Review kennel rankings | /where/awhere_kennel_leaderboard.php |
Four ranking views load correctly |
Some newer installations also have /siteadmin/health.php and an add-club tool. Their current code was not supplied for this documentation release; use the installed dashboard links and do not assume a filename or shared password behavior.
Change the Site Administration password
With the password-kit bootstrap installed:
- Extract
half-mind-siteadmin-password-kit.zipon your computer. - Open
Set-Admin-Password.htmlin Chrome or Edge with the accompanying JavaScript files present. - Enter a unique password of at least 16 characters twice. Save it in your password manager.
- Create and download
siteadmin_password.php. - Back up the existing
/siteadmin/admin_bootstrap.phpand any existing password override file privately. - On first installation, upload the kit's
admin_bootstrap.phpand generatedsiteadmin_password.phpinto/siteadmin/. On later resets, replace only the generated password file. - Keep the filename exact; remove a browser-added
(1)or(2)suffix. Test a new login and confirm the old password is rejected.
The local tool creates a salted hash without transmitting the readable password. Leave siteadmin_config.php and backup settings intact. Existing sessions must log in again on their next request after the password changes; a request already running is not cancelled.
The password-kit bootstrap uses this priority: SITEADMIN_PASSWORD_OVERRIDE_HASH from siteadmin_password.php, then SITEADMIN_PASSWORD_HASH from siteadmin_config.php, then the Directory Health hash if no siteadmin hash is defined. An installed bootstrap from another release may differ. Deleting the override re-enables the older configured password. Directory Health's own password is not changed by this reset.
Do not reinstall an older bootstrap merely to follow these instructions if your server now has a newer version with additional functions. Have the password changes merged into that current version.
Regular maintenance
- Before changing code or data: download the affected current files and database backups; note the change and rollback plan.
- Weekly: back up both configured database targets, even if they currently point to one shared database. Check the actual target names privately.
- Monthly: back up files and separately protect excluded assets/configuration. Perform a restore test periodically.
- After each release: test the changed feature, its related pages and authentication; review PHP logs; then record verification and accept a baseline if appropriate.
- Quarterly: review stored backup retention, broken links and outdated pages. Keep at least two dated recoverable generations.
Use update verification correctly
The supplied verifier compares a fixed list of files to a saved SHA-256 baseline. Missing or changed files are findings, not automatically errors: an intentional update changes a checksum. Database checks are started separately; previously saved results may be stale. Run them again after connection/schema changes.
The fixed list in the supplied verifier does not include every newer addition, including the lightbox JavaScript, kennel leaderboard, encoding audit or all documentation assets. Test these explicitly. A passing checksum comparison is not PHP linting, a security audit or a successful functional test.
Review changes, test the site, record the result and only then choose Accept files as baseline. Accepting a broken release merely makes the broken files the new reference. Keep the private baseline and verification history with operational backups.
Directory maintenance
Use the installed directory edit form for corrections. Record the club's exact name, country/state, website, contact and any relevant history. Before adding a club, search for alternate names and abbreviations to avoid duplicates. Use the installed add-club tool if present; otherwise follow the established contact process. Do not guess SQL column names or IDs.
The broken-link monitor was requested, but its current code, cron schedule and installation status were not supplied here. Do not assume checks are running. Confirm the installed tool's last-run time and configuration before documenting it as operational.
Handle private information
Use HTTPS and keep credentials, SQL files and rollback copies outside the public website. A hidden-profile flag must remain respected by public aggregations. Do not include passwords, authentication hashes, member emails or full private records in support screenshots. Administrative page authentication does not automatically protect every static file beside it.
Country Continents administration
Open /siteadmin/country_continents.php using your existing Site Administration
login. If login returns you to the dashboard, open the editor address again.
The editor keeps old areas intact and edits only wherecountry_continent_real.
- Select Only show entries needing assignment.
- Review a country/territory and choose one of the seven continents.
- Use that row's Save button. Each row saves separately.
- Repeat until the pending list is clear; use search to find a specific entry.
- Test a known profile on My Milestones, the world map and Export.
The migration's initial proposals followed existing areas for 216 entries. Thirteen were left for review: Egypt, Georgia, Armenia, Azerbaijan, Cyprus, Kazahkstan, Russia, Turkey, Indonesia, Saipan, East Timor, UK-South Georgia and UK-Falkland Islands. This includes boundary/transcontinental cases and unusual old groupings; not all 13 span continents. Decide a consistent site convention. Each country earns one continent. Australia is included in Oceania.
Review existing proposals too: they are based on old areas, not an independent geographic audit. Changes affect every user who selected that country on their next page load. New countries need a classification here. Clearing an assignment makes affected users' continent totals pending; it does not clear their selections.
The editor checks the prior value before saving. If another edit occurred, review the current value and try again instead of overwriting it blindly.
Certificate and leaderboard checks
The new certificate requires /where/awhere_export.php and both TTF files in
/where/certificate-fonts/. Keep the accompanying font license. Test Preview,
Download PDF and CSV while logged in. The existing logo must be readable at
/halfmindlogo_200w.gif or /images/halfmindlogo_200w.gif; PHP GD supports its
conversion. Missing logo support does not stop the rest of the certificate.
Inspect the actual PDF, not only the export landing page. Confirm name, kennel, continent ribbon, all five totals, detail pages and special characters. CSV also includes continent fields. It is a private account export, not a public leaderboard download.
The personalized kennel link uses exact-name search and retains global rank. Check a kennel below the normal top 50 and switch ranking tabs. Do not interpret members' summed travel as unique countries visited by the club.
Site overview and technical reference
Updated 9 September 2026. Paths below identify the maintained sections described by supplied files and recent changes. A path listed here is not proof that its latest package has been uploaded.
Main sections
| Section | Main paths | Purpose |
|---|---|---|
| Home | /index.php |
Entry point for Half-Mind resources |
| About | /about.php |
Site history and original founder account |
| Regional directory | /regionalwebsite/index.php, p_list1.php, theworld.php |
Find kennels and regional contacts |
| Club editing | /regionalwebsite/p_edit1.php, p_edit2.php |
Existing edit workflow; inspect current code before changing |
| Directory quality | /regionalwebsite/directory_health.php |
Directory Health report |
| Travel rankings | /where/index.php |
Individual hasher rankings |
| Kennel rankings | /where/awhere_kennel_leaderboard.php |
Aggregate participating members by profile kennel |
| Plates | /plates/index.php |
Plate gallery, captions and search |
| Songbooks | /songbooks.php |
Songbook introduction, PDF and scans |
| Scan viewer | /songbook/showpage.php?pg=06 |
A selected scan with previous/next navigation |
| Administration | /siteadmin/index.php |
Maintenance, backups and documentation |
On On Podcast is linked from the site but is a separate WordPress project. Its plugins, transcripts and episode operations are outside this manual.
Shared presentation
The shared root files are /2025header.php, /2025styles.css and /footer.php. Some modernized public pages use /legacy-pages.css and /legacy-footer.php. The Where section has its own /where/awhere_menustrip.php and footer. /where/legacy-where.css and legacy-where.js add scoped form/checklist enhancements to the supplied modernization pages.
The corrected kennel leaderboard loads the root header, then the current Where menu strip. A stale /where/2025header.php must not take precedence there. The latest supplied menu includes My Counts, Hare Places, My Milestones, Profile & Password, My Lists, maps, Races, Export and logout for members, plus public rankings/report links. The Kennel Leaderboards link is placed after Where Hared.
Account and report routes
File in /where/ |
Function |
|---|---|
awhere_login.php, awhere_logout.php |
Sign in/out |
awhere_register.php, awhere_verify.php |
Registration and email verification |
awhere_PasswordForgot.php, awhere_changepassword.php |
Password recovery |
awhere_aboutme.php |
Account/profile editing |
awhere_MyCounts.php, awhere_MyHares.php |
Hashed/hared place selections |
awhere_MyRaces.php, awhere_racerankings.php |
Race records and rankings |
awhere_MapEm.php, awhere_usmap.php, awhere_worldmap.php |
Lists and maps |
awhere_blog.php |
Bio page; the legacy filename remains |
awhere_iso.php, awhere-haresc.php, awhere_MapKennelworld.php |
Search and reports |
awhere_export.php, awhere_milestones.php |
Personal progress, continents, PDF preview/download and CSV export; source inspected |
Data and configuration
The supplied admin backup code loads /regionalwebsite/hminddbparams.php for the directory target and /where/p_207_where_params.php for travel data. They define $pdb_server, $pdb_user, $pdb_password, $pdb_database and, where needed, a table setting. /where/awhere_dbparams.php initializes a shared connection for several account pages.
The directory audit report names 2007_rdir as a table with 55 utf8 text columns. Use the configured table name: the verifier has a fallback spelling of rdir_2007, which is different and could cause a false missing-table report if the config lacks a table name. WhereUser has 31 reported text columns using utf8mb4; the report omits numeric columns by design.
The supplied report labeled directory includes both directory and Where tables. This suggests the targets may share a database, but compare the actual configurations before assuming that. Backup labels do not isolate tables: the supplied dumper exports all base tables in the selected database.
Implementation status and unresolved work
| Item | Evidence and limit |
|---|---|
| Legacy modernization | Replacement package prepared for supplied public pages and 17 Where pages; live installation not certified |
| Plates lightbox | Standalone JavaScript add-on delivered; current page needs its script include |
| Kennel leaderboard | Replacement and subsequent header/menu fix delivered; server testing required |
| Password reset kit | Local hash generator and updated bootstrap delivered; check installed bootstrap before reusing |
| Encoding audit | Live reports supplied: 231 files checked, 113 heuristic findings, not a complete site scan |
theworld.php |
Inspected: one Windows-1252 dash in a comment; absent explicit charset; correction not delivered in that inspection turn |
| Export/certificate, milestones and world-map continent badge | Latest source inspected and replacements prepared; see September 9 update below |
| Add-club, newer health dashboard | Current source/deployment not verified here |
| Broken-link cron monitor | Requested; executable, schedule and deployment not verified here |
| Additional table wrappers | Explicitly deferred; no new site-wide rollout assumed |
Source and testing boundaries
These guides reconcile the supplied admin files, menu, leaderboard source, encoding reports, inspected world-directory file and generated packages. PHP syntax-parser checks and selected simulated/aggregation tests were performed for generated code. Native PHP, live MySQL, real browser rendering and deployment were not validated in those packages unless explicitly stated. Do not describe them as fully tested production releases.
September 9: continents, milestones, map and export
| Component | Data and behavior |
|---|---|
wherecountry.wherecountry_continent |
Historical area; unchanged |
wherecountry.wherecountry_continent_real |
New nullable VARCHAR(20), one of seven continents |
/siteadmin/country_continents.php |
Authenticated per-country editor, search and unassigned filter |
/where/awhere_milestones.php |
3/4/5/6/7 clubs from selected country IDs and real classifications |
/where/awhere_worldmap.php |
Highest club and progress for the displayed hasher |
/where/awhere_export.php |
Private PDF preview/download and CSV with continents |
/where/certificate-fonts/ |
Required DejaVu Sans regular/bold TTFs and license |
The supplied reference export contained 229 countries/territories and nine areas. The migration seeds 216 proposals and leaves 13 entries for review. It preserves nonblank classifications on rerun and matches ID and country name.
Travel configuration uses $pdb_server, $pdb_user, $pdb_password and
$pdb_database. The first country-editor release incorrectly expected $db_*
variables. Use the corrected editor; do not change your passwords to fix that.
My Milestones and Export use country ID minus one with Y flags. The existing world map chooses country ID or ID-minus-one by comparison with the stored country total and accepts Y/1/T. Its badge follows the map's choice. This legacy heuristic may disagree with other pages. Do not rewrite flags without inspecting a real affected account and preserving a backup.
A missing classification suppresses the completed continent count/club rather than awarding a partial result. Optional continent lookup failures should not stop the map or the rest of the export. Counts are self-reported.
The certificate uses embedded fonts and measured text widths, with Windows-1252 conversion retained from its previous PDF generator. UTF-8 CSV preserves a broader character repertoire. The map's Burma/Myanmar alias is retained.
Verification boundary
The latest export passed lint in a WebAssembly PHP CLI runtime. Its actual PHP PDF generator ran with sample data; first/detail pages and a long-name seven- continent example were rendered and inspected. Earlier PHP changes used a static syntax parser. Migration seeds passed a SQLite fixture, not native MySQL DDL execution. Live database/authentication, host logo support and deployment still require server checks. None of these guides certifies live installation.
Content and directory maintenance
Add or correct a regional club
Search the directory first, including alternate spellings. Use the installed add/edit tool and its existing access controls. Confirm the kennel name, country/state, website/contact, run details and history with the club where possible. Save, reload the listing and verify links. If a field displays question marks, stop and check encoding before saving the damaged display back to the database.
Do not use a direct SQL insert copied from an old example: required fields, IDs and validation may have changed. The latest add-club implementation was not supplied for this documentation release. Use its installed form or obtain its current source before extending it.
Add a license plate
In the supplied gallery, entries live in the $plates array in /plates/index.php.
- Back up the current file and retain the original photo privately.
- Choose a simple unique filename, such as
plate106.jpg, and upload it into/plates/. Match filename capitalization exactly. - Copy one existing array entry and update its
image,hasher,kennelandnotesvalues. Escape apostrophes correctly in PHP string literals; do not remove array commas. - Preserve the current page's image-alt implementation. Describe identifying visible text and the relevant hasher/kennel without inventing details.
- Validate PHP syntax, upload the changed file, search for the new entry and test enlargement.
The delivered gallery had 105 entries; that was a source snapshot, not a current live count. Some kennel/notes strings contain trusted HTML links. Do not insert unreviewed submitted HTML into these fields.
Install the plate lightbox
Upload plates-lightbox.js into /plates/, then add the following before </head> in the current gallery page:
<script src="/plates/plates-lightbox.js?v=1" defer></script>
The script works with the supplied .hm-legacy-card layout, .plate-card/.plate-item layouts and plate* image filenames under /plates/. It keeps existing image links as a fallback. Differently named photos should be within a supported card. Increment the version query when replacing the script so browsers request the update.
Add or restore songbook scans
Keep the existing /songbook/ PDF and JPG assets; changed-files packages omit them. Numbered scan filenames follow magic_page06.jpg; the four cover slugs are outerfrontcover, innerfrontcover, innerrearcover, outerrearcover. The delivered viewer recognizes pages 01–92 and those covers.
Restore an original missing scan under its expected name rather than renumbering later pages. A new page outside the current range needs the viewer whitelist and overview updated together. Test original-size links, previous/next, cover transitions and the complete PDF. OCR/searchable lyrics would be a separate feature.
Edit About or the homepage
Use the latest server file. Preserve shared header/footer includes and the founder's original text unless intentionally editing it. The About update added a timeline and an expandable historical account; dated statements in that account should not be presented as current operational facts. Test links and phone layout after changes.
Update navigation
The main site header lives at /2025header.php. Where section navigation lives at /where/awhere_menustrip.php. Keep global resources in the main header and account/report controls in the Where menu.
Kennel Leaderboards belongs after Where Hared under Rankings & reports:
<li><a href="awhere_kennel_leaderboard.php" class="where-menu__link<?= $activeClass('awhere_kennel_leaderboard.php') ?>">Kennel Leaderboards</a></li>
Retain the existing login/logout logic, active-class callback and horizontal mobile scroll. The page must actually include the menu strip; editing the menu file alone cannot add it to a page that never loads it.
Record a content change
Keep a date, affected paths or record IDs, short reason, backup location and verification result. Use a private maintenance record for personal information. Do not include credentials in release notes.
Maintain continent classifications
Adding a country to the reference list is separate from assigning its real continent. Preserve existing IDs because users' selections are positional. Use Country Continents in Site Administration after a new country is added. Keep the old area label for checklist organization and choose one real continent for milestones. Do not rename or reorder reference IDs to fix map aliases.
Choose a documented site convention for transcontinental entries. A single country checkbox cannot identify which part of a country a hasher visited. Record the reason for unusual assignments in your private maintenance notes.
Update help content
The new-user guide is the introductory walkthrough; the site user guide gives more detail. The site description supplies reusable introductory wording. Update the relevant Markdown file and regenerate HTML together. If presenting these guides publicly, use only visitor-facing documents; the admin viewer requires login, but static HTML files beside it are not automatically protected.
Backup and recovery guide
What the supplied backup tool covers
| Output | Actual scope |
|---|---|
half-mind-directory-*.sql |
All base tables in the database selected by the directory config |
half-mind-where-*.sql |
All base tables in the database selected by the travel config |
half-mind-files-*.zip |
Files eligible under the installed size and exclusion rules |
If both configs target one database, both SQL buttons can export the same tables. Do not import either casually over a shared production database. The supplied SQL dumper includes table definitions and rows, not a complete server backup of users/grants, events, stored routines or views. It does not establish a consistent transaction snapshot; coordinate a quiet period or use the host's consistent backup for an active site.
The file tool's default per-file limit is 25 MB. It excludes various config/parameter files, logs, caches, dependencies and backup folders. Do not assume every credential file is excluded: the supplied filename rules do not specifically exclude the newer siteadmin_password.php. Treat the resulting ZIP as private and inspect the current exclusion rules before distributing it.
Keep configuration/password files, large media, dependencies, hosting settings and a full-account recovery route separately. A small changed-files update ZIP is not a backup.
Make and validate backups
- Use
/siteadmin/backup.php. Choose Download, Store privately or Download and store as appropriate. - Retain copies on your computer or trusted private storage, with dates and target database names recorded privately.
- Check that downloads completed and archives open. Compare their contents to what should be included; missing expected files can be due to exclusions.
- Confirm SQL includes table definitions and inserts for populated tables. Empty tables legitimately have no inserts.
- Restore into an isolated database/site copy and test representative records. File size and the presence of SQL statements alone do not prove recoverability.
- Keep at least two dated generations before deleting old copies.
For encoding repairs, also retain an original host-level dump before any conversion. Application exports run through a connection charset and can transform incorrectly labeled bytes.
File rollback
For a small code update, restore the exact overwritten files from the pre-update copy. Preserve current database configuration and password files. Do not restore an entire old website merely to undo one JavaScript change. Test affected pages and authentication after restoration.
For full recovery, work on staging or use maintenance mode. Restore compatible code, media and configuration, then the intended database snapshot. Recreate the private backup folder outside the public root. Verify permissions and paths, PHP version, extensions and credentials before reopening access.
Database restore with phpMyAdmin
- Identify the intended target database from its config, not the backup filename alone.
- Export the current state privately even if damaged, if possible.
- Prefer an isolated test database first. Import the SQL using phpMyAdmin or the host's supported method.
- Verify table names, record counts and representative names/accents, flags, accounts and club details.
- Schedule the actual restoration so newer submissions/edits are not silently lost.
The supplied dump contains DROP TABLE IF EXISTS: import replaces matching tables and their data. Database DDL is not reliably undone by a surrounding transaction. A real backup is the rollback mechanism.
Failures and escalation
- If ZIP support is missing, use hosting File Manager or an account backup.
- If creation times out, avoid repeated long requests. Use the hosting backup/CLI route. Lowering the per-file size limit cannot solve every timeout or large SQL table.
- If the private directory is unwritable, have the host create the configured folder outside the public root with appropriate owner-only permissions. Do not solve this by placing SQL downloads in a public folder.
- If MySQL connection fails, verify config paths and user grants without exposing credentials in screenshots.
- If a download is interrupted, use a retained private copy if creation completed and download through the hosting file tools.
After recovery, rerun functional and database checks before accepting a new checksum baseline.
Include the new continent and certificate assets
Back up wherecountry after reviewing classifications: restoring an older
snapshot may lose wherecountry_continent_real and the assignments. The original
migration CSV is only an initial proposal, not a backup of later admin edits.
Include the current milestones, world-map, export and continent-editor PHP files, the certificate-fonts folder and existing logo. Check actual file-backup exclusions rather than assuming font assets are present.
A code-only rollback can restore the previous PHP file while leaving the new column in place. Removing the column is not necessary to undo a page update. The full project handoff is useful context and source, but is not a complete hosting or database backup.
Installation, updates and migration
Small update procedure
- Identify the package and exact target paths. A filename suffix such as
(1)reflects a download copy, not the deployed PHP name. - Download the latest server files being replaced. Compare with the package's source/version notes so recent fixes are not overwritten.
- Back up data when the update changes persistence or schema; for broader releases take file and database backups.
- Apply on staging if available. Merge package contents into existing folders; do not replace whole directories with a changed-files-only ZIP.
- Run native PHP lint on changed PHP files using the domain's PHP version. In a hosting terminal,
php -l filename.phpchecks syntax, but the terminal PHP may differ from the website PHP. Ask the host for the matching executable if needed. - Test the changed feature and affected neighbours. Inspect PHP logs. Refresh changed assets with Ctrl+Shift+R or a versioned asset URL.
- Deploy, repeat essential checks, record the change and accept the verifier baseline only when appropriate.
A standalone PHP syntax parser is useful but does not validate MySQL queries, PHP extensions, include paths, emails or browser behavior. The old guide says PHP 8.3 was selected; confirm the current domain setting rather than treating that as permanent.
Package map
| Package | Where it belongs |
|---|---|
| Legacy modernization | Merge supplied root, plates, songbook and where files; retain media/config |
| Songbook link fix | Root /showpage.php only, never the actual viewer path |
| Password kit | Local HTML/JS stays on computer; only the reviewed bootstrap and generated password PHP go to siteadmin |
| Plate lightbox | /plates/plates-lightbox.js plus one script include in the latest gallery |
| Encoding audit | /siteadmin/encoding.php; no data conversion |
| Kennel leaderboard/menu fix | /where/awhere_kennel_leaderboard.php |
| Where menu | /where/awhere_menustrip.php |
| This documentation release | Merge its siteadmin contents; open /siteadmin/docs.php |
If multiple packages include the same file, use the latest combined version or merge the changes. Do not sequentially upload an older full package after a newer targeted fix.
Hosting migration
Inventory domains, redirects, PHP settings, databases, private configuration, assets, mail delivery, installed cron jobs and backups. Confirm whether the two configured databases are actually distinct. Export and restore into the new host, set database grants, and update configuration privately.
Transfer the shared presentation files and all dependent assets. Review .htaccess for host-specific PHP handlers, HTTPS and old redirects; do not transplant those blindly. Recreate private backup/verification storage and any confirmed cron schedule. Test using a host preview or controlled staging setup before DNS changes, including certificate coverage for intended hostnames.
Retain a rollback window and the old host until verified. Coordinate a final data copy or editing pause so account updates made during migration are not lost. Test mail verification/recovery and all file downloads from the new host.
Release checks
- Homepage/header/footer and mobile navigation; logged-out versus logged-in Where menu.
- Directory location search, club edit/save/reload and international characters.
- Account login/logout, profile change with password blank, counts, hare selections and races.
- Lists/maps; aliases such as Burma/Myanmar without changing stored selection positions.
- Bio links, kennel leaderboard filters/totals/ties and menu highlighting.
- Plates search/lightbox and original image fallback.
- Songbook PDF/scans, missing-page response and old root viewer link.
- Backups, fresh verification database results and this documentation viewer.
Test the new PDF/CSV export and continent workflows described below. Confirm the actual link-monitor implementation before documenting its scheduled operation.
Install the real-continent feature
- Back up the current travel database and affected PHP files.
- In phpMyAdmin select the actual database used by the travel configuration.
- Import
migration/add-real-continent.sqlfrom the feature package. Do not import the original full reference-table export over live tables. - Upload the corrected
/siteadmin/country_continents.phpusing pdb settings. - Review pending and initial assignments in the editor.
- Upload the latest combined
/where/awhere_milestones.phpand desired world-map badge update. v2.1 is visible on the prepared milestones card. - Test a known account and preserve the resulting assignments in a backup.
The additive migration checks whether the column exists and seeds only blank values. MySQL DDL can auto-commit; a transaction does not replace a backup. The script requires appropriate ALTER/UPDATE grants. If the column was added but seeding failed, diagnose the error and rerun; do not drop the table.
Install the fun certificate
Upload /where/certificate-fonts/ first, then the latest /where/awhere_export.php.
Both fonts are required. No new SQL import is needed if real continents are
already installed. Test preview, PDF download, CSV, long names, all seven
continents and pending classifications. The host's logo/GD support needs its
own check. Restore the prior export PHP file to roll back.
Install this documentation edition
Merge the enclosed siteadmin folder into the existing siteadmin folder. It
replaces docs.php and guide files, not authentication, config or the dashboard.
Open /siteadmin/docs.php; select the new-user guide, site description and
admin guide. Test editable-source downloads. Keep old or newer dashboard
customizations when adding any links.
For offline reading, extract the ZIP and open OPEN-GUIDES.html. Each guide can be printed or saved as PDF using the browser. The documentation ZIP does not install the continent or certificate features themselves.
Encoding and shared design guide
UTF-8 end to end
Use UTF-8 without BOM for PHP/HTML/JS/CSS source. For HTML responses send header('Content-Type: text/html; charset=UTF-8'); before output and place <meta charset="UTF-8"> near the beginning of the document head. Preserve session, redirect and cache logic. CSV, JSON, PDF and image endpoints need their own content types.
After a successful MySQLi connection and before queries/escaping, use a checked $conn->set_charset('utf8mb4') call. PDO MySQL should include charset=utf8mb4 in its DSN. Connection settings configure transport; they do not convert existing columns or repair damaged records.
For plain text in HTML, use htmlspecialchars((string)$value, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'). Substitute handling prevents a malformed string from disappearing, but does not repair the source. Do not double-escape intended trusted HTML or transform passwords.
Findings from the supplied audit
The file scan covered 231 direct files and reported 113 heuristic findings; it was not cut off by its scan limit, but it omitted nested folders and skipped some large files. Findings include comments, examples and old unused scripts. The audit can flag itself because it contains encoding examples.
The database report was labeled directory. Its audit connection used utf8mb4; the database default was utf8. 2007_rdir had 55 utf8 text columns; WhereUser had 31 utf8mb4 text columns. Several ancillary/copy tables retained latin1 or utf8. No record contents were scanned, and this report does not certify every application connection.
The uploaded regionalwebsite/theworld.php had exactly one invalid UTF-8 byte: Windows-1252 0x96 between Kazakhstan and Uzbekistan on line 121, inside an old commented section. It also lacked explicit HTML charset declarations and an explicit charset on its new connection. That inspection did not deliver a patched file and does not explain unrelated question marks on the club editor.
Repair workflow
Back up original bytes and inspect a few affected values with their declared charset, primary key and HEX representation. Separate incorrect display decoding, genuine Latin-1 text, UTF-8 bytes mislabeled as Latin-1, already stored mojibake and irreversible replacement characters.
Do not blanket-convert tables or replace every â or Ã: these characters can be legitimate. Test schema changes on staging, including indexes, unique constraints, foreign keys, collation support and locks. Preview per-record repairs with old/new values and require the old value still to match before update. Preserve rollback data.
Use /siteadmin/encoding.php to gather reports. It reads metadata/source; it does not make those repairs. Obtain the latest active source files before changing headers so newer feature fixes survive.
Shared design and accessibility
Use the root header and current stylesheet. Include the Where menu after the header for account/report pages. Keep page-specific CSS scoped to a unique container/class to avoid changing menus on unrelated sections. Prefer root-relative links for shared assets and explicit __DIR__-based PHP includes.
Use one meaningful page heading, descriptive labels, visible keyboard focus, understandable error/empty states and accurate alt text. For the lightbox, preserve the original image link as fallback and return focus to the thumbnail on close. Wide rankings may keep their existing scrollable containers; a new site-wide table-wrapper rollout was deferred.
Public pages can use public caching only when their response is identical for all visitors and contains no session-specific navigation/data. A shared header that varies with login status changes that assumption. The kennel leaderboard uses private/no-store caching. Do not indiscriminately remove session initialization or apply public cache headers across the site.
References: PHP charset API and MySQL column charset conversion.
Certificate rendering
The new PDF embeds DejaVu Sans regular/bold fonts supplied in certificate-fonts. Measured text widths keep names and detail lines within the page. The renderer still converts text to Windows-1252 before PDF output; embedding a Unicode-capable font alone does not make this generator fully Unicode. Do not describe it as supporting every script. CSV remains UTF-8.
Continents have explicit text labels and a pending state; never communicate club membership with colour alone. Keep the club names consistent across map, milestones, certificate, CSV and guides.
Troubleshooting
HTTP 500 or blank PHP page
Record the page path and time, then read the hosting PHP error log. A parse error means PHP could not understand the source; it is not fixed by clearing browser cache. Restore the pre-update file if necessary. Check upload completeness, exact filename, PHP version and included file paths. Provide the error and current source, excluding credentials.
Incorrect menu on kennel leaderboard
Use the menu-fix leaderboard version. It must include /2025header.php and /where/awhere_menustrip.php, not prefer a stale Where header. Confirm the menu file contains Kennel Leaderboards after Where Hared. If the main login/logout link is still wrong, inspect the current root header's session logic separately.
Leaderboard empty, unavailable or unexpected
Unavailable means a connection/query failed; review the PHP log. A true empty result means no qualifying groups. Confirm the travel config targets the database containing WhereUser and the expected numeric fields. Active accounts use WhereUser_Status = 'A'; the email-validity flag is not an activity flag. Hidden accounts do not contribute.
Compare known members and their recorded totals. Countries/states are summed, not deduplicated across members. Different kennel spellings remain separate. The query groups capitalization according to lowercasing and database collation; do not treat it as a canonical club-ID mapping.
Siteadmin password rejected
Confirm the generated file is named exactly siteadmin_password.php, is in /siteadmin/, and the installed bootstrap supports its override constant. Check for an accidental .txt suffix. Use the chosen password, not its hash. Test signed out or in a private window. A separate Directory Health page may still use a different password; do not assume it shares the override.
Verification takes too long
The supplied revision separates file checks from database checks. Confirm that version is installed. Do not keep opening more long-running requests. Check the last database-result time and host logs. A connection timeout does not guarantee every subsequent query finishes within the same interval. Escalate to the host if database/server load is the cause.
Songbook spins or loops
Test /songbook/showpage.php?pg=06 directly. Root /showpage.php is only a redirect shim. Installing the shim as /songbook/showpage.php creates a loop. Keep the real viewer, PDF and scan assets in /songbook/. If the direct viewer also hangs, inspect server errors and included header/footer files.
A page briefly looks old
Compare /where/ with /where/index.php. Check for an old index.html or index.htm, directory-index rules, browser/server caches, a redirect or styling loaded late. No old-page flash was conclusively reproduced in the earlier check. Do not delete a file solely because its name looks old; inspect its use first.
Accents, apostrophes or question marks look wrong
Inspect source bytes, HTTP Content-Type, meta declarations, connection charset and stored HEX values. A UTF-8 label does not convert Windows-1252 bytes. A literal question mark stored in place of lost data may require restoration from an original. Avoid resaving an editor form that already displays damaged data until the cause is known.
Map omits a selected country
First confirm the saved list contains it. Then inspect the current map's normalization/alias object and geographical dataset. Add 'burma': 'myanmar' only to the existing matching alias scheme; preserve all other entries. Handle legacy spellings such as Portgual deliberately. Never reorder positional country/state flag strings to fix a display label.
Plate photo opens a separate page
Confirm /plates/plates-lightbox.js exists and the current gallery includes its script tag. Refresh. Check the browser console, filename/card selector compatibility and native dialog support. Without JavaScript the original image-link behavior is intentional. If an image itself fails, check its actual filename and capitalization.
Profile field changes seem to disappear
Save and reload, then distinguish browser autofill, form binding and database persistence. Password fields should remain blank for unrelated changes. Report the current source and a non-sensitive example; do not submit repeated compensating edits without checking the stored value.
Continent Clubs remains Unavailable
Check which page and text you are seeing. The earlier wording “Each continent
counts once. Australia and Oceania count as one continent” belongs to the old
area-lookup implementation. Upload the latest real-column milestones file to
/where/awhere_milestones.php, not siteadmin or the root. The prepared v2.1
version displays its version in the card. Hard-refresh and confirm the path.
If the new version is installed, open Country Continents and filter for missing assignments. Every selected country must have a valid real continent. Complete the pending entries, save each row and reload the user's page. Verify the new column exists in the actual travel database if the editor cannot load it.
A user with an unmatched country ID can also remain pending. Inspect the log and current country reference without changing stored bit positions. Missing log output alone does not prove the current code or database is correct.
Country editor: undefined db_host / empty user / password NO
This was a variable-name bug in the initial editor. The travel config defines pdb_server, pdb_user, pdb_password and pdb_database. Install the corrected country_continents.php. Do not reset database passwords or hard-code credentials into the editor. No SQL migration rerun is needed for this code correction.
Certificate fonts missing or old design displayed
Upload the entire certificate-fonts folder beside awhere_export.php, including DejaVuSans.ttf and DejaVuSans-Bold.ttf. Confirm exact case and readable files. The old export file will still produce the old design even if fonts are uploaded. Replace the PHP too, then reopen Export and use a fresh preview link.
If the logo is absent, check its two supported local paths and PHP GD. If PDF works but some characters do not, note the retained Windows-1252 limitation and use UTF-8 CSV for the complete text. An expired token means reopen Export while logged in; do not strip the token check.
Continents differ between map and certificate
First compare the actual selected countries. The map retains a legacy offset heuristic while milestones/export use ID-minus-one. Capture a concrete mismatch, check the saved flags and reference IDs, and preserve data before correcting that separate compatibility issue. Reassigning real continents to mask an indexing problem can change results for every other user.
Documentation release notes — 9 September 2026
This edition contains eleven coordinated guides, including a dedicated How to use Half-Mind.com for new users and a reusable site description. The site user guide and admin guide now cover the latest prepared features.
Added or corrected
- Continent Clubs at 3/4/5/6/7, the world-map badge and pending classifications.
- Nine old areas kept separate from the new real-continent field.
- Country editor, initial migration proposals, review process and pdb connection fix.
- Exact-name kennel search, personalized profile link and retained global rank.
- Fun certificate, real PDF preview/download, embedded fonts, details and CSV.
- Removed older statements that export/milestones source had not been inspected.
- Recorded map-versus-export indexing differences and PDF character limitations.
- Updated deployment, backup, content, troubleshooting and test-status guidance.
Included files
Editable Markdown and printable HTML for every guide; an offline index; an updated authenticated docs.php with an explicit allowlist; legacy README and backup-guide entry points. Documentation contains no credentials or member records. Static HTML is not protected simply because it is inside siteadmin.
Installation and status
This is a documentation update only. It does not change authentication, passwords, database schema/records, maps or export code. Read INSTALL.txt for upload paths. The publication date is not a live-site verification date. Features are described from supplied source and generated packages; check their installed versions.
Maintaining the set
Edit Markdown, regenerate the matching HTML and refresh guide lists together. Keep examples free of secrets. Record meaningful test evidence and distinguish prepared files from confirmed deployment. The site user and new-user guides should stay focused on user tasks; put technical caveats in admin/reference sections where possible.