Conversation
Update worker-card template to show "Enabled"/"Disabled" translation keys for the worker().nsfw boolean instead of "Yes"/"No"
Add a .gitmodules file registering the docs/haidra-assets submodule (https://github.com/Haidra-Org/haidra-assets.git). This tracks documentation assets as a separate repository under docs/haidra-assets so they can be managed and updated independently.
- Introduce a site-wide glossary and contextual help UI: adds GlossaryModalComponent, InfoTooltipComponent, PageIntroComponent and GlossaryService, plus new glossary-related templates and wiring (FAB + modal in app.component). - Enable anchor scrolling and set a viewport offset in app config and app component to account for the fixed nav. - Update many pages/components to include info-tooltips and page intros (models, stats, workers, guis/tools, item list sections, public workers) and wire the tooltip/glossary IDs. - Change donate page layout to prefer Haidra with a new highlighted entry and deprecate Patreon. - Add supporting styles and i18n entries. - Misc: register new components in imports, add helper logic for focus/scroll behavior, and add CSS files for tooltips and help UI.
- Adds a new mission page, stating rationale and Haidra's intentions re: the horde
- Adds site-wide glossary
- FAQ
- Adds ToC with page-position tracking
- Allows multiple questions to be unfolded at a time
- Adds intra-linking, links to glossary entries
- Adds additional defensive questions ("doomed ai startup?", "some sort of blockchain ... project?"
- Changed route from "joining" -> "workers"
- contribute/workers redesigned with clearer justifications and clear need-based identification through actual live worker status.
- It now automatically says "volunteers needed" when worker counts are low and/or queues are high, and identifies which worker type
- Restructure the header/navigation: add GitHub star widget, adds missing Contribute dropdown on mobile with route-aware active state
- Many external-link/rel="noopener noreferrer" fixes for external anchors. with indicators the link goes to a different domain
- Refactor the beginner header (seen on the GUIs and Tools webpage and the bottom of the homepage) into a more simplified banner.
- Introduce a new kudos-term component for the instances that its sprinkled around without context or explanation
- Misc: add assets and styles, small accessibility and tooltip/string formatting tweaks across several components, and update various routes/data/translations.
Refactor UI and behavior across GUIs, profile and header components: - Beginner header: add dismiss/restore controls backed by a signal and localStorage (isDismissed, dismiss, restore). - Item list: major card & table layout overhaul (badges, images, recommended styling, action button ordering, expanded detail layout) and use TranslocoService for default button text. - Guis & Tools page: split GUIs into image/text sections, default grid view, add TOC parent/child rendering, pill scrolling with auto-center, scroll progress/passed-section tracking, and filter-bar ResizeObserver to keep layout CSS var in sync. - Profile page: add dialogs and UI for changing username, contact and public_workers toggle with success/error toasts and related signals; wire new update flows to AuthService. - AuthService: add updateProfile(...) to PUT user changes and refresh local user data. - Assets: update/clean image/text GUI json data (reorder entries, add/remove metadata flags, update links and source control fields).
- Introduce sticky header system for more robust anchor/scroll behavior, - Adds StickyHeaderDirective and StickyRegistryService to register fixed elements and compute total offset; scroll-utils with helpers and tests (scrollToElement, scrollToElementCentered, scrollToAnchorWhenReady) to reliably handle anchor navigation and lazy-loaded routes; ScrollFadeDirective to show trailing fade on horizontally-scrollable tab lists. - Adds NetworkStatusComponent (sidebar/compact/footer variants) and FloatingControlsComponent (glossary FAB + scroll-to-top), wires them into templates, updates app.component to use the sticky registry for viewport offset and to re-scroll anchors after navigation. - Changed GitHub buttons script to load lazily, and includes related template, style, - Better standardized job/worker "units" across main page and active details pages. - Reworked "tab" system (for sub-pages) for modernity and implementation consistency across pages - Did a pass for the copy describing the individual guis for the guis&tools page. Also adjusted/fixed various entries' metadata (links, etc) - Other UI/accessibility tweaks. - Better emphasis for need for workers - "Easy to Use" flag for guis (currently only aiscribbles) - Made the beginner header dismissable, but not on the homepage (where it forms critical content)
- Introduce an in-app navigation notification system and wire it into the UI, starting with a "need workers" nag. - Adds NavNotificationService (with localStorage dismissal + mobile indicator), types and unit tests, and a NeedWorkersNotifier service (with spec). - Integrates notifications into the app header: tooltip, attention dot, dropdown/mobile banners, and session mobile-acknowledge behavior. - Also adds an arrival highlight signal to the Workers page and refactors the workers page markup (new worker-type-* classes, updated SVG markup, and cleaner headings/descriptions). - Minor template/layout tweaks (remove duplicate admin header, adjust users list container), translation update, and stylesheet additions/updates for notification and workers styles.
Introduce a new Generations tab to the profile: add GenerationsTab component (template, logic and spec tests) to render image, text and alchemy generations with requestor UI (form + raw JSON), metadata badges, status/check details and JSON toggles. - Add generation types, service spec for AiHorde, and update ai-horde service usage and profile page to integrate the new tab. - Also include updated en.json translations required by the new UI. - The commit adds thorough scenario tests covering outputs, metadata levels, waiting/processing/faulted states, and UI toggles.
- Introduce a FloatingActionService to manage shared floating actions and migrate the fixed admin save button into that system (removed inline fixed button from user-management template and register/unregister in component). - Render registered floating actions in floating-controls. - Enhance generations tab: replace model input dropdown with a combobox-style autocomplete (template, logic to pin/toggle dropdown, computed filtering returns full list when empty search), update form status classes for success/error messages, and add corresponding i18n key. - Add comprehensive styles for the autocomplete widget and form status messages; adjust .btn-save-fixed styling to be rendered inside the floating-controls container. - Minor cleanup: remove unused EntityLookup import from public-workers component and tweak i18n warning text formatting.
- Account for the sticky section heading when scrolling to FAQ anchors by adding an extra height calculation in scrollToElement and passing stickyRegistry.totalOffset() + extra to scrollToEl. - Centralize the sticky offset in CSS by using --sticky-offset (fallback 80px) for collapsible top positioning, and add scroll-margin-top rules for faq items and sections so deep links clear both global sticky headers and section headings. - In the donate template, move the Patreon "kudos" info-note to remove a duplicated block and keep the note next to the relevant content.
- Introduce PageGuideService to centralize page-guide dismiss state and localStorage handling (including dismiss/restore and dismissAll/restoreAll). - Refactor BeginnerHeaderComponent and PageIntroComponent to use the service's computed signals instead of per-component localStorage/platform checks. Inject the service into ProfileComponent and add UI buttons to hide/restore all guides in profile view. - Also tighten a conditional in generations-tab to only show certain buttons when gen.result is present or when gen.check is true and not done. Add corresponding i18n strings for the new profile actions.
Tighten up desktop nav layout and switch nav breakpoints to rem units. Updates in: - src/styles/_navigation-links.css: prevent link wrapping (whitespace-nowrap, shrink-0), remove padding-inline, adjust menu gaps and enforce no-wrap/min-width on the desktop menu (.nav-menu-desktop). - src/styles/_navigation.css: media query changed from 1165px to var(--breakpoint-nav). - src/styles/_theme.css: --breakpoint-nav updated from 1165px to 76.8125rem. These changes reduce unintended wrapping/truncation of nav items and standardize breakpoint units for better scalability and follows up on the bug report by @RobbieNeko
- Introduce AdminGenerationTrackerComponent (template + logic) to track image/text/alchemy generations with polling, per-generation UI (status, retry, view result, metadata, response JSON) and controls to clear/expand responses. - Integrate tracker into admin user management (tracked generations section, track buttons, auto-refresh + refresh controls) and add refresh controls/auto-refresh to the user generations tab. - Propagate GENERATION_NOT_FOUND handling across GenerationsTab and UserManagement (mark generations as notFound, show retry and explanation, skip polling for notFound). - Update ai-horde service tests to expect GENERATION_NOT_FOUND for 404s and add non-404 error tests. - Add related type and translation entries and small utility/UX adjustments (metadata labels, wait time formatting, loading state handling).
Introduce touch-friendly, popover-based tooltips and enhance glossary and worker UI. - Add TouchTooltipDirective to provide accessible tap/hover/focus tooltips (replacing title attributes) and use it for various worker status icons. - Add WORKER_STATUS_ICONS, WORKER_ICON_MAP and getWorkerIconSvg helpers plus WorkerStatusIconComponent; update worker-card to use the icon component and new tooltip directive and add a glossary hint in the worker list. - Extend GlossaryModalComponent with tabbed UI (dictionary / this-page), relevant-only filtering, page-specific entries, SVG sanitization and helpers for navigating between tabs/terms. - Add PageGlossaryContext, PageGlossaryEntry and GlossaryTab types and page context registration/clear methods in GlossaryService; worker list registers a glossary context describing worker icons and related terms. - Improve UnitTooltipComponent to use Popover API, delayed hide/open behavior, click/pointer handling and account for sticky header offsets via StickyRegistryService. - Add AiHordeService.inferPublicWorkers and AuthService.fetchAndEnrichUser to infer/populate public_workers (API doesn't return it reliably); call inference when loading/updating users and update profile toggle handling. - Minor fixes: map profile style IDs, focus behavior for glossary modal, and various template/CSS adjustments for accessibility and visuals. These changes improve mobile accessibility, consolidate icon definitions, and surface contextual help for the workers page.
Apply widespread HTML/TS formatting and markup cleanups across the app (reflowed SVGs, multiline attributes, consistent transloco bindings, small refactors) and increase Angular build budgets, add server/client profile routes (profile/** server route; redirect profile to profile/overview and profile/:tab client route)
- Introduces a "glass" feel to many elements, especially sections, callouts, cards and the "tabs" (like on the active details page).
- Reworks the worker cards to show all (that the user can see) fields and their values by default (this has the effect of keeping card heights the same)
- Always shows placeholders (dimmed) icons for worker status (low, high speeds, etc). Also uses new icons for these status.
- Tooltips for these now clickable (mobile support) and stay within the viewport
- Worker names now stack at the top of the screen as you scroll on both the "Your Workers" and active workers pages
- Tabs and "sub" tabs now stack at the top of the screen as you scroll
- Hopefully makes the contribute/workers clearer and funnel users towards action
Apply updates to package.json. After pulling these changes, run npm install (or your preferred package manager) to regenerate a lockfile or reconcile dependency state as needed.
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
aihordenet | b4fb5d1 | Mar 16 2026, 12:05 AM |
Replace yarn install/build steps in Dockerfile with npm ci and npm run build to use npm for deterministic CI installs and builds. package-lock.json was regenerated by npm (reflecting updated dependency metadata and versions) as part of the switch.
…lution Apply small refactors and tooling updates: - src/main.server.ts: import BootstrapContext and forward it to bootstrapApplication to support context-aware server bootstrap. - src/app/services/translator.service.ts: remove HashMap import and use Record<string, unknown> for translation params to improve typings and avoid dependency on Transloco HashMap. - src/app/app.component.ts: remove unused HostListener event parameter from window:resize handler. - tsconfig.json: change moduleResolution from "node" to "bundler" to align with bundler-based resolution. These changes improve type correctness and align the app bootstrap and build resolution with current tooling expectations.
- Removes many unused CSS styles - Consolidates similar classes - Renames many "admin" styles which previously were for only the admin panel but now have a more general use - Improves the styles edit with the new glass ethic, adds tri state toggles for nullable fields, and adds a verification modal on save - Redirects style create on /details/styles to the relevant user profile section
- Add a Users entry to the Details navigation (desktop + mobile) and perform broad HTML/template cleanups across the app via prettier - Changes include restructured profile-styles sub-tab layout and create-form placement, standardized multi-line attributes and SVG markup, and small markup/spacing fixes in shared-key, toggle-checkbox, worker-card, and worker-list templates. - Also apply minor TypeScript tidyups: safer querySelector formatting, normalized model-search substring handling, and small boolean/format adjustments in style form processing. - These edits are primarily presentation and maintainability improvements
- Add resilient clipboard copy helper and use it in SharedKeyCard; implement textarea fallback for non-async clipboard contexts. - Refactor shared-key form markup into accessible, card-style panels with per-form field IDs (formIdPrefix + fieldId), rearranged inputs, toggles, presets and improved submit/cancel actions. Small UI tweak in shared-key-list button sizing. - Overhaul profile page: add Settings tab, reorganize profile overview into glassy cards (identity, summary, activity, quick-nav), show active generation and asset counts, add danger-zone and activity sections, and move account/settings controls into clearer layout. - Update English translations for new labels and add CSS for profile glass sections, danger zone, shared-key form components, quick-nav grid, and related data-display styles.
Improve tooltip measurement and placement, unify floating/surface styling, and refresh several form/card layouts. - InfoTooltip & UnitTooltip: implement two-pass measurement to use real rendered dimensions, clamp positions to viewport/top obstructions, prefer edge-anchoring, add requestAnimationFrame recalculation, and adjust estimated heights/widths; add surface-floating class to tooltip contents. - Dropdowns/dialogs: apply surface-floating and modal-panel classes for consistent floating panels and larger dialog panels. - Forms & shells: convert shared-key and style forms to surface-glass/form-section shells, reorganize style form UI and JSON editor, add accessibility attributes and class refinements. - Kudos panel: integrate InfoTooltip for profile metrics and wire glossary IDs/tooltips for profile variant. - Style cards: show public/private badge, short id, and computed parameter count. - Misc: small markup/spacing/accessibility tweaks across many templates, minor TypeScript formatting cleanup, add new scroll-reveal directive, and update various CSS files to support the new shells/styles. These changes improve tooltip reliability across viewports, unify visual surface treatments, and make the profile/style/shared-key UIs more consistent and accessible.
- Register client-agent and rate-limit HTTP interceptors and introduce multiple UI and logic changes for style/profile flows. - Fix profile style fetching to be type-aware (use UserStyleReference.type to call image/text endpoints) to avoid double calls and wrong-type fallbacks; add unit tests covering type-aware loading and edge cases. - Refactor StyleForm to use a native dialog for confirmation, add payload snapshotting to detect unsaved meaningful changes, support edit mode (inline editing), and improve open/close confirmation behavior. - Update StyleCard and templates to simplify markup and improve KPI/accessibility layout. - Add new reusable components (user badges, user-kudos-card, user-records-panel) and related tests, plus various routing/queryParam handling and small UI/ARIA improvements.
- Add a requiresAtLeastOneModel validator and apply it to the models form control to ensure at least one model is provided. - Update the models autocomplete/template to show a required marker, apply an error class when invalid/touched, and render a localized error message. - Adjust selectModel to replace the last partial segment (the in-progress search token) with the selected model instead of appending to the raw input. - implify confirm dialog handling by removing afterNextRender and calling showModal() directly. - Add corresponding i18n string for the models-required message.
- Restructure style-card template so .card-preview is always rendered, add an SVG placeholder for image styles without examples, and simplify the image/text conditional branches. - Adjusted card/grid CSS: fixed 3-column desktop grid (2 columns on mid view), host flex stretching so cards fill cells, consistent preview heights, description flexing to align KPIs, type-specific top borders and tinted preview backgrounds, stronger borders/shadows, and icon color tweaks. These changes unify card sizing and visual distinction between image and text styles, producing a more deterministic and consistent layout.
- Introduce a reusable ModelAutocomplete component (TS + HTML) and replace duplicated inline autocomplete UIs in GenerationsTab and StyleForm with this component to centralize autocomplete behavior and support multi-model entry. - Update GenerationsTab to parse comma-separated model strings, include trimmed model lists in image generation requests, and simplify dropdown DOM handling. - Add AiHordeService.getSelfUserByApiKeyUncached and AuthService.updateCurrentUserActiveGenerations to support uncached self lookups and syncing active_generations into auth state. - Remove duplicate ElementRef/document click logic from components and adjust templates accordingly. - Add unit tests for the new service method and for generation/user-refresh and model-parsing behaviors in GenerationsTab specs. - Makes shared keys card match heights regardless of content
Makes the intro-features match the width of the hero section at 768-1024 screen widths
- Restructure the transfer page into a two-column hero + stacked form layout and improve UX feedback (success/error/info states, validation messages, responsive styles). - Add validatedTargetKind state and validateAsSharedKey logic in TransferComponent to support shared-key targets, and update SharedKeyService.getSharedKey to accept an optional apiKey override. - Move the transfer CTA into the user kudos card and remove the duplicate link from the profile page. - Style updates in _forms.css, _data-display.css and _typography-headings.css to support the new layout and visual tweaks.
- Add status and create-form anchors to the shared-key list template and wire them up in the component. - Introduces ViewChild references for statusRegion and createFormRegion and helper methods scrollToStatus/scrollToCreateForm. - On successful create the form now collapses, the success message includes the created key name, and the view scrolls to the status region. - When expanding the create form the view scrolls to the form. - Also add aria-live="polite" to the success alert for accessibility and move the shared-key list rendering to accommodate the anchors. - Add a small i18n key (transfer.target_valid_user). - These changes improve UX and accessibility around key creation and status feedback.
Wrap the "register_account" links in app.component.html with an auth check so the register link is rendered only when auth.isLoggedIn() is false. Applied the conditional around both the desktop nav dropdown and the mobile submenu entries.
- Replace the deprecated Patreon donation card with a GitHub Sponsors card in the donate component: update link, card classes, markup and SVG path for the GitHub logo, and remove the deprecated info-note block. - Update English translations: add donate.ways_to_donate.github_sponsors.title and .description and remove the old Patreon title/description/deprecated note entries (Patreon kudos keys remain).
- Move inline edit form out of SharedKeyCard into SharedKeyList and simplify card API. - SharedKeyCard no longer tracks local edit state or expose update outputs; it emits an edit event and requests edits via requestEdit(), removes the embedded form, adds status icons and title on the key ID for copy accessibility. - SharedKeyList now manages editingKeyId/editingKey/editFormValues, renders a single centralized edit form, handles onEdit/onEditSubmit/cancelEdit, and scrolls into view for create/edit/status regions. - mapToFormValue and deriveExpiryDays were moved from the card to the list to centralize form value computation. Also: add visual and accessibility improvements across the app — status SVGs, card border color states, long-key truncation with horizontal scrolling, updated profile login panel markup and styles (accessibility attributes, layout classes) and new form styles. - Transfer page: add targetUserChecking signal and UI states (checking message and guidance), plus i18n entries for new transfer messages. These changes improve UX, accessibility, and separate concerns between display (card) and editing (list).
- Rework KudosBreakdownPanel to support a profile-oriented layout and richer data: add field grouping (incoming/outgoing/lifetime), sectioned profile views, API field badges, and many computed totals (incoming/outgoing, net flow, calculated total, balance difference). - Expose a new currentBalance input and wire it through UserKudosCard to show differences vs reported balance. - Update template markup to render sectioned metrics and a summary area. Add extensive styling for the profile kudos layout, API badge tooltip, summary rows, and responsive profile overview columns; also constrain .info-box max-width. - Update profile page markup to lay out Kudos and Activity side-by-side on wider viewports. Add new i18n strings and glossary text (including API field annotations) to support the UI changes. - Fixes homepage hamburger button styling mismatch (caused it to on-hover "grow" outside the viewport)
tests: verify worker lookup failure doesn't block
- Replace inline modal markup with a CDK dialog template and wire up Angular CDK Dialog. - Adds @angular/cdk to package.json and updates package-lock.json. - Extracts modal content into an ng-template, injects Dialog, opens/closes dialogs via DialogRef (keeping dialogOpen state in sync), and closes the dialog when navigating to a model. - Adds DialogModule import and styles for CDK backdrop/overlay centering. This effectively fixes the issue of the models list being "trapped" by the workers-list container, appearing centered to *that*, which is not intended
- Add GitHub Actions CI workflow (lint, format-check, test, build) for the redesign branch. Introduce eslint.config.js with Angular+TypeScript rules, .prettierrc for formatting, and a Husky pre-commit hook to run tests. - Update angular.json to add a lint target and set angular-eslint as a schematic collection. - Update package.json and lockfile to include lint/format tooling and apply formatting/lint fixes across many components, pipes and services; remove vite.config.ts.
- Add a typecheck job to CI (npx tsc --noEmit) and enable workflow concurrency/cancel-in-progress; make the build depend on the new typecheck step. - Switch eslint.config (deprecated) to use defineConfig, add stricter rules (prefer-standalone, prefer-inject, ban-ts-comment) and tidy imports. - Remove many Angular components/pipes' standalone: true flags and apply small formatting/import cleanups across templates, specs and TS files. - Also replace NgStyle/ngStyle usage in unit-tooltip with explicit style bindings and perform minor whitespace/linewrap fixes.
- Large admin-area refactor: standardize text utility classes (replace admin-text-* with text-primary/text-secondary), consolidate loading/empty states into shared state-container/spinner markup, and add JSON highlighting for generation responses. - Introduces extractApiError and serializeErrorDetails helpers for clearer HTTP error messages, updates StickyHeaderDirective to accept null (opt-out) and adjust registration behavior, and migrates filter dialogs to native <dialog> with viewChild/backdrop handling. - Centralizes toast handling: new AdminToastService and layout-level AdminToastBar with details/expand support (signal-based), replacing per-component toast signals. - Various admin pages and components updated to use the new services, helpers, and styles for more consistent UX and error reporting.
- Introduce a reusable JSON inspector component and a lightweight trigger button to view raw JSON across the app. - Adds app-json-inspector (copy/download/highlight, multi-section support) and app-json-inspector-trigger components, plus styles for the trigger and inspector. - Integrates the inspector into generations, shared-key, style, worker, user-management and profile views (replacing the previous raw JSON dialog in user-management) and wires open/close state and section payloads. - Also adds a sanitizer for large base64 payloads in generations and helper functions to compute downloadable filenames.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Features
Glossary, info-tooltips, and page intros
GlossaryModalComponent,InfoTooltipComponent,PageIntroComponent, andGlossaryService, plus glossary templates and wiring (FAB + modal inapp.component).Profile Generations tab
GenerationsTabcomponent (template, logic, and spec tests).en.jsontranslations and extensive scenario tests covering outputs, metadata levels, waiting/processing/faulted states, and UI toggles.Mission page
Worker demand notification system
UI / UX Improvements
Shared Keys Improvements
Fixes
Worker NSFW display wording
"Enabled"/"Disabled"instead of"Yes"/"No"for theworker().nsfwboolean.Fix
/profile/generations/not populating under most conditions and add clearer error-state explanations.Clean up the admin UI, fixing several bugs and view/element-blocking style issues while standardizing style classes.
Other Changes
haidra.net/donateto the preferred donation method.