import { ANATOMY_TITLE, ARCHITECTURE_TITLE, GRAMMAR_TITLE, METHODOLOGY_TITLE, ONTOLOGY_TITLE, } from "#configuration/strings/page.strings"; import type { HomeCardCopy } from "#types/home.types"; export const HOME_HEADING = "Bane's Lab"; export const LIST_SEPARATOR = ", "; const ENGINEERING_LEADS = "Engineering leads"; const SOFTWARE_ARCHITECTS = "Software architects"; const AI_ASSISTED_DEVELOPERS = "AI-assisted developers"; const TOOL_AUTHORS = "Tool authors"; const AUDIENCE_ORDER: readonly string[] = [ ENGINEERING_LEADS, SOFTWARE_ARCHITECTS, AI_ASSISTED_DEVELOPERS, TOOL_AUTHORS, ]; const audienceOf = function audienceOf(chosen: ReadonlySet): string { return AUDIENCE_ORDER.filter((label) => chosen.has(label)).join(LIST_SEPARATOR); }; export const GRAMMAR_CARD: HomeCardCopy = { audience: audienceOf(new Set([SOFTWARE_ARCHITECTS, AI_ASSISTED_DEVELOPERS, TOOL_AUTHORS])), description: "A structured instruction format for AI systems. A document declares its type, draws its verbs from a closed vocabulary, closes every node on an evidence-bearing gate and states its own limits, and a reasoning loop walks it.", examples: [ "READ_RESOURCE store INTO held", "[check] held conforms to schema (evidence: the validator's report)", "NEVER PROCEED past a failed gate", ], subtitle: "Pattern Abstract Grammar", title: GRAMMAR_TITLE, }; export const METHODOLOGY_CARD: HomeCardCopy = { audience: audienceOf(new Set([ENGINEERING_LEADS, SOFTWARE_ARCHITECTS, AI_ASSISTED_DEVELOPERS])), description: "A method for building software with AI. Code bloat, architectural drift, context dilution and inconsistent behaviour, each named as a class and each watched by a check rather than by attention.", examples: ["One loop at every size", "The check ships with the rule", "Evidence, never a claim"], subtitle: "Constraints, checks and skepticism", title: METHODOLOGY_TITLE, }; export const ARCHITECTURE_CARD: HomeCardCopy = { audience: audienceOf(new Set([ENGINEERING_LEADS, SOFTWARE_ARCHITECTS, AI_ASSISTED_DEVELOPERS])), description: "Software architecture for systems a model helps write. A system as a graph, principles as typed records with their tensions resolved by domain, anti-patterns as decay paths, and coverage derived from a grid rather than counted.", examples: ["A system is a graph", "A tension is a domain boundary", "An architecture is its predicate set"], subtitle: "Structure that holds when the author is probabilistic", title: ARCHITECTURE_TITLE, }; export const ONTOLOGY_CARD: HomeCardCopy = { audience: audienceOf(new Set([SOFTWARE_ARCHITECTS, AI_ASSISTED_DEVELOPERS, TOOL_AUTHORS])), description: "The queryable canon behind the architecture: every principle with its relations and its repair, every term with its definition, every algorithm with its contract, the reasoning spine and the resolved tensions, rendered from the same data the tooling reads.", examples: [ "A principle and its ten relations", "A tension and its resolution", "An algorithm as a typed loop instance", ], subtitle: "The canon as data, rendered by shape", title: ONTOLOGY_TITLE, }; export const ANATOMY_CARD: HomeCardCopy = { audience: audienceOf(new Set([SOFTWARE_ARCHITECTS, AI_ASSISTED_DEVELOPERS, TOOL_AUTHORS])), description: "The client source of this site, parsed on every build. Every folder and file with its stats, its syntax walk, its definitions and their call edges, and the diagnoses the parser ran.", examples: [ "A folder and its stats", "A file's walk, definitions and source", "Call edges you can follow file to file", ], subtitle: "The site's own source tree", title: ANATOMY_TITLE, }; export const VIEW_PREFIX = "View "; export const DEVELOPED_BY = "Developed by "; export const AUTHOR_NAME = "Jay Baleine"; export const PLATFORM_LINKS_LEAD = "For platform details, visit "; export const TERMS_LINK = "Terms of Service"; export const PRIVACY_LINK = "Privacy Policy"; export const INFORMATION_LINK = "Security Information"; export const LIST_FINAL_SEPARATOR = ", and "; export const SENTENCE_END = ".";