Skip to content

Add Arthuriana: interactive Arthurian legend character map with heraldry#145

Merged
hawkandheron-dev merged 6 commits into
mainfrom
claude/add-arthuriana-section-HZ10s
May 17, 2026
Merged

Add Arthuriana: interactive Arthurian legend character map with heraldry#145
hawkandheron-dev merged 6 commits into
mainfrom
claude/add-arthuriana-section-HZ10s

Conversation

@hawkandheron-dev
Copy link
Copy Markdown
Owner

Summary

Introduces a comprehensive interactive visualization of Arthurian legend characters, featuring a dynamic graph layout system, heraldic shield rendering engine, and a dedicated heraldic design studio.

Key Changes

Core Application (ArthurianApp.jsx)

  • Interactive character map with search functionality
  • Multiple layout modes (Round Table, Hub, Tree, Web)
  • Relationship filtering by type (family, marriage, mentor, fellowship, rival, quest)
  • Character detail panel with sources and relationships
  • Parchment-themed UI with medieval aesthetic

Character Database (characters.js)

  • 832-line comprehensive database of 80+ Arthurian characters
  • Each character includes: id, name, title, faction, group classification, heraldic blazon, relationships, and literary sources
  • Organized by realm (Round Table, Pendragon, Orkney, Cornwall, etc.)
  • Extensive source citations from Geoffrey of Monmouth through modern adaptations (T.H. White, Tolkien, etc.)

Heraldic System (ArthurianHeraldry.jsx)

  • Complete heraldic shield rendering engine with SVG
  • Support for 12 tinctures (or, argent, gules, azure, sable, vert, purpure, murrey, sanguine, tenné)
  • Field divisions (per pale, per fess, per bend, per chevron, per saltire, quarterly)
  • Patterned fields (chequy, lozengy, bendy, paly, barry, ermine, vair)
  • Ordinaries (chief, pale, fess, bend, cross, saltire, chevron, pile, bordure)
  • 20+ charge devices (lions, dragons, eagles, crosses, crowns, etc.) with attitudes and arrangements

Graph Layout Engine (ArthurianGraph.jsx)

  • Four distinct layout algorithms:
    • Round Table: Circular arrangement with Arthur at center, knights arranged by realm in concentric rings
    • Hub-Spoke: Arthur at center with inner/outer rings by character group
    • Family Tree: Hierarchical rows organized by generation
    • Web: Force-directed graph layout
  • Relationship visualization with styled edges (color, dash pattern, width by type)
  • Interactive node selection and hover states

Heraldic Studio (ArthurianStudio.jsx)

  • Standalone heraldic design tool
  • Real-time shield preview
  • Field mode switching (plain, divided, patterned)
  • Tincture selection with visual swatches
  • Ordinary and charge management
  • Preset templates for quick design
  • Blazon description generation

Styling

  • Consistent parchment theme across all components (ArthurianApp.css, ArthurianStudio.css)
  • Medieval manuscript aesthetic with noise texture overlays
  • Responsive layout with sticky panels
  • Smooth transitions and hover effects

Integration

  • Added navigation links in site nav and landing page
  • Configured Vite entry points for both main app and studio
  • HTML entry points for both applications

Notable Implementation Details

  • Relationship graph uses SVG for edge rendering with configurable dash patterns and widths
  • Heraldic blazons are data-driven objects enabling programmatic shield generation
  • Character positions calculated dynamically based on layout algorithm and viewport dimensions
  • Search results filtered in real-time with character name and title matching
  • Source citations include historical context and literary evolution of characters across centuries

https://claude.ai/code/session_013yG27kBU5JeKdX29ZwV1kv

claude added 5 commits May 16, 2026 18:43
Arthuriana: ports the Claude Design prototype (medieval heraldic
character network) into the Vite/React build as two new pages —
apps/arthuriana.html (armorial graph) and apps/arthuriana-studio.html
(coat-of-arms builder). Converts Babel globals to ES module exports,
replaces the host-only TweaksPanel with a persistent ArthurianControls
overlay (layout buttons + relation toggles), and wires up nav links in
SiteNavPanel and index.html.

Username display: ContributorPortalApp now prefers clerkUser.username
over fullName/firstName when building displayName. adminService
ensureUserExists now syncs display_name on every login (not only when
empty), so existing users get their username applied on next sign-in.

https://claude.ai/code/session_013yG27kBU5JeKdX29ZwV1kv
Replaces the generic gold cross-hatch on the topbar shield with a white
falcon silhouette traced from the Windhover logo — beak facing left,
wing sweeping to the upper-right, tail fanning to the lower-right,
all coordinates verified inside the heater shield's curved boundary.

https://claude.ai/code/session_013yG27kBU5JeKdX29ZwV1kv
…hield

Replaces the hand-traced SVG path (which didn't read as a bird at
small scale) with the actual Windhover_BLK.png imported at build time,
rendered white via SVG feColorMatrix inversion, and clipped to the
shield interior. Vite processes the asset correctly at build time.

https://claude.ai/code/session_013yG27kBU5JeKdX29ZwV1kv
SVG grows from 34×40 to 44×52; the image element shrinks from 78×57
to 60×44 viewBox units so the bird stays at ~26×19 px while the shield
gains ~5 px of red border on each side.

https://claude.ai/code/session_013yG27kBU5JeKdX29ZwV1kv
Shield: 44×52 → 40×47 px. Image element: 60×44 → 66×48 viewBox units
to hold the falcon at the same ~26×19 px while the shield shrinks.

https://claude.ai/code/session_013yG27kBU5JeKdX29ZwV1kv
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9e25ed79b0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

if (existing) {
const updates = {};
if (!existing.display_name && displayName) updates.display_name = displayName;
if (displayName && displayName !== existing.display_name) updates.display_name = displayName;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve existing display names on sign-in

When an existing user row already has a display_name, this now overwrites it whenever Clerk reports a different displayName. That regresses the documented backfill-only behavior for claimed/pre-seeded users: for example, an admin-invited contributor whose row was seeded as "Jane Smith" will be renamed to their Clerk username on the next portal load, changing names shown in comments/admin views without an explicit profile edit.

Useful? React with 👍 / 👎.

if (!character) return null;

const byId = new Map(allCharacters.map((c) => [c.id, c]));
const rels = (character.relations || []).filter(r => byId.has(r.to));
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Apply relation filters in the detail panel

The app passes the current relation filter into Panel, but the panel builds its relation list from every relation regardless of whether that type is disabled. In the Arthuriana page, disabling a relation type hides those edges in the graph while the selected character’s detail panel still shows the filtered-out bucket, so the controls give inconsistent results for users inspecting a character.

Useful? React with 👍 / 👎.

Disabled relation types now hide their buckets in the panel to match
the graph, which already hides those edges. Fixes inconsistency noted
in code review.

https://claude.ai/code/session_013yG27kBU5JeKdX29ZwV1kv
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 17, 2026

Deploying profile-site with  Cloudflare Pages  Cloudflare Pages

Latest commit: ae05a8f
Status: ✅  Deploy successful!
Preview URL: https://f362523f.profile-site-bgf.pages.dev
Branch Preview URL: https://claude-add-arthuriana-sectio.profile-site-bgf.pages.dev

View logs

@hawkandheron-dev hawkandheron-dev merged commit 30ac2bf into main May 17, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants