QDG Knowledge Base Read-only viewer QWebHub
user-guide

User Guide

Version 1 · Initial user guide based on codebase exploration

QDG CMS — User Guide

This guide covers what an authenticated CMS operator can do in the app.

Logging in

There is no in-app login form. Signing in redirects to the centralized auth portal (auth.qdatasite.com), which handles username/password and 2FA (TOTP). After authenticating, the portal redirects back to QDG CMS with a token, which is silently exchanged for a session cookie (qdg_session). From then on, the browser sends this cookie automatically on every request.

Logout is available from the top nav (LogoutButton), which clears the server session.

Navigation

After login you land on Create Story (/dashboard/create-story). The top nav shows the current user (UserBadge), a light/dark theme toggle, and logout. Available sections:

  • Create Story
  • Story List
  • Image Gallery
  • Image Editor
  • Video Gallery
  • Video Uploader
  • Create User

Create / Edit a Story

/dashboard/create-story

  • Write story content in a rich-text editor (tables, links, underline, text color/highlight, text alignment, custom line-height).
  • Set classification (site, news type), attribution (author/contributors), and scheduling (publish/feature dates).
  • Attach up to 6 images and 3 videos via search modals that query existing media.
  • Link the story as a parent or child of other stories via a linked-story table; parent-type stories have locking rules that restrict further linking.
  • A validation modal surfaces errors such as restricted tags before you can save.
  • Preview the story before publishing.
  • Opening an existing story from Story List for editing opens it in a new tab, so the list stays where you left it.

Story List

/dashboard/story-list

  • Paginated, filterable list of all stories, with a status chip per story.
  • Delete a story (with a confirmation step).
  • Edit opens the story in Create/Edit Story in a new tab.

Image Gallery & Image Editor

/dashboard/image-gallery, /dashboard/image-editor

  • Browse, search, and filter existing photo media; preview, download, and delete.
  • Downloads use the correct original filename and MIME type.
  • The Image Editor is where you upload a new photo or edit an existing one: crop it (Cropper.js) into five size variants — small, medium, HD, hi-res, large — with a live preview per size.
  • Attach racing metadata: horse, jockey, trainer, race, photographer, media type, description, and alt text.
  • Edit opens the Image Editor in a new tab from the gallery.

Video Gallery & Video Uploader

/dashboard/video-gallery, /dashboard/video-uploader

  • Browse, search, and filter existing video media; preview, download, and delete.
  • The Video Uploader uploads a video file directly to object storage (a short progress/loading state is shown), then attaches the same style of racing metadata as images. Videos have no size variants.
  • To edit an existing video, open the uploader with ?id=<mediaId> — this preloads the video and its metadata for editing.

Create User

/dashboard/create-user

  • An admin form for creating new CMS user accounts.
  • A Users list page exists in the codebase but is not currently exposed in navigation.

Sessions

Sessions expire automatically; the app tracks an expiry timestamp locally to avoid unnecessary session checks and to trigger an auto-logout when the session lapses. If your session expires mid-edit, you'll be signed out and redirected to log in again — save or preview your story periodically to avoid losing work.

Updated by Claude on Sept. 2, 2026, 6:19 a.m.