| """Per-Space configuration for the Loreify D&D tools portfolio.""" | |
| from dataclasses import dataclass, field | |
| COLLECTION_TITLE = "Free D&D Tools, Generators, Trackers, and Calculators" | |
| # Filled in by deploy.py after the Collection is created; the footer link | |
| # falls back to the owner's Spaces listing until then. | |
| COLLECTION_URL = "https://huggingface.co/collections/Jordancole21/free-d-and-d-tools-generators-trackers-and-calculators-6a5fd7e9bbbcea33a3ab7ed2" | |
| OWNER = "Jordancole21" | |
| LOREIFY_TRIAL_URL = "https://loreify.ai/start-trial" | |
| class RelatedSpace: | |
| title: str | |
| url: str | |
| description: str | |
| class CTA: | |
| copy: str | |
| button: str | |
| utm_content: str # hero | post_tool | mid_page | footer (or page-specific) | |
| class SpaceConfig: | |
| slug: str # Space repo name, e.g. "dnd-monster-builder" | |
| utm_campaign: str # e.g. "dnd_monster_builder" | |
| title: str # Space metadata title | |
| emoji: str | |
| short_description: str # <= ~60 chars | |
| h1: str # exact-intent H1, one per page | |
| tagline: str # one-sentence outcome promise | |
| primary_keyword: str | |
| secondary_keywords: tuple = () | |
| hero_cta: CTA = None | |
| post_tool_cta: CTA = None | |
| mid_page_cta: CTA = None # optional third placement | |
| footer_cta: CTA = None | |
| related: tuple = () # tuple[RelatedSpace] | |
| def space_url(self) -> str: | |
| return f"https://huggingface.co/spaces/{OWNER}/{self.slug}" | |