diff --git a/@deployments/atlilith.www/locales/en/company-values-body-sovereignty.json b/@deployments/atlilith.www/locales/en/company-values-body-sovereignty.json new file mode 100644 index 000000000..16a245173 --- /dev/null +++ b/@deployments/atlilith.www/locales/en/company-values-body-sovereignty.json @@ -0,0 +1,149 @@ +{ + "meta": { + "title": "Body Sovereignty | lilith", + "description": "Sex work stigma stems from patriarchal ownership of women's bodies. Criminalization enforces the claim that women do not own themselves." + }, + "hero": { + "title": "Body Sovereignty", + "subtitle": "The Root Cause", + "tagline": "Why Sex Work Is Stigmatized" + }, + "navigation": { + "back": "All Values", + "prev": "Previous", + "next": "Next" + }, + "intro": { + "principle": "Sex work stigma does not stem from moral concern or the protection of women. It stems from the patriarchal premise that men are entitled to free access to women's bodies.", + "description": "The dismissal 'anyone can do it' reveals the assumption: women's bodies are treated as a communal resource men are entitled to access. A woman who charges for that access is not transgressing against decency. She is transgressing against male ownership.", + "summary": "Every argument against sex work — from criminalization to 'exploitation of men's nature' — traces back to a single premise: she does not own what she is selling. We build infrastructure that asserts the opposite." + }, + "ownershipClaim": { + "title": "The Ownership Premise", + "description": "Every civilization that has criminalized sex work has simultaneously maintained legal structures of male ownership over women's bodies. This is not coincidental — it is causal.", + "evidence": [ + { + "claim": "Coverture (13th–19th century)", + "detail": "A married woman's legal identity was subsumed into her husband's. She could not own property, sign contracts, or retain her own wages. Her body was legally his.", + "source": "Blackstone, Commentaries on the Laws of England (1765)" + }, + { + "claim": "Marital rape exemption (1736–1993)", + "detail": "Marriage constituted permanent sexual consent. A husband could not rape his wife because her body was his to access. Not fully abolished in all US states until 1993.", + "source": "Hale, Historia Placitorum Coronae (1736); People v. Liberta (1984)" + }, + { + "claim": "Adultery as property crime", + "detail": "From the Code of Hammurabi to English common law, adultery was prosecuted as an offense against the husband's property rights — not a moral failing.", + "source": "Code of Hammurabi, Laws 129-132 (c. 1754 BCE)" + }, + { + "claim": "Bride price across civilizations", + "detail": "The exchange of wealth for a woman in marriage — an explicit economic transaction for sexual and reproductive access — documented across 67+ societies.", + "source": "Goody & Tambiah, Bridewealth and Dowry (1973)" + } + ], + "conclusion": "Marriage is the legitimated transfer of ownership. Sex work is the unauthorized assertion of ownership by the woman herself." + }, + "theDismissal": { + "title": "\"Anyone Can Do It\"", + "description": "The most common dismissal of sex work is itself the tell. It does two things simultaneously: devalues the labor by treating the woman's body as a commodity so basic it has no specialist value, and reveals the assumption that sex is something women simply have and men naturally need — a resource so fundamental it should be freely available.", + "comparison": [ + { "accepted": "A massage therapist charges for skilled touch", "stigmatized": "A sex worker charges for skilled intimacy" }, + { "accepted": "A personal trainer charges for physical guidance", "stigmatized": "An escort charges for embodied companionship" }, + { "accepted": "A nurse performs intimate bodily care", "stigmatized": "A sex worker performs intimate bodily care" }, + { "accepted": "A therapist charges for emotional vulnerability", "stigmatized": "A companion charges for emotional and physical vulnerability" } + ], + "conclusion": "The moment the labor involves sex, the ownership claim activates. She is not selling a service — she is privatizing a commons. And the reaction is proportionate to the perceived theft." + }, + "chargingAsTransgression": { + "title": "Charging as Transgression", + "description": "Every frame in anti-sex-work rhetoric implicitly assumes that women's sexual labor belongs to someone other than the woman performing it.", + "frames": [ + { "claim": "\"She's selling her body\"", "surface": "The woman is degraded", "actual": "Her body is a thing that shouldn't be sold — because it belongs to others" }, + { "claim": "\"It exploits men's nature\"", "surface": "Men are victims of desire", "actual": "Men are entitled to sexual access; charging is exploitation of them" }, + { "claim": "\"No one would choose this\"", "surface": "Workers lack agency", "actual": "Women cannot legitimately choose to profit from their own bodies" }, + { "claim": "\"It destroys families\"", "surface": "Sex work threatens stability", "actual": "Male sexual access outside marriage threatens the ownership contract" } + ], + "conclusion": "The 'someone' varies — husbands, society, God, the public good — but the claim is consistent: she does not own what she is selling." + }, + "theInversion": { + "title": "The Inversion", + "description": "The claim that sex work 'exploits men's sex-driven nature' performs a precise rhetorical inversion: the person asserting ownership of their own body becomes the exploiter, and the person who assumed free access becomes the victim.", + "parallels": [ + { "inversion": "\"Unions exploit business owners\"", "reality": "Workers asserting fair compensation reframed as predation" }, + { "inversion": "\"Welfare exploits taxpayers\"", "reality": "Poverty reframed as theft from the productive" }, + { "inversion": "\"Divorce exploits husbands\"", "reality": "A woman leaving an ownership arrangement reframed as stealing from it" }, + { "inversion": "\"Sex work exploits men's nature\"", "reality": "A woman charging for her own body reframed as predation on desire" } + ], + "conclusion": "In each case, the party asserting autonomy is positioned as the aggressor. The inversion protects the ownership claim by making its enforcement look like self-defense." + }, + "criminalizationAsEnforcement": { + "title": "Criminalization as Enforcement", + "description": "If the goal were protection, the evidence would have changed the laws decades ago. 80+ studies show no evidence criminalization reduces sex work or trafficking.", + "mechanisms": [ + { "mechanism": "Strips legal standing", "effect": "A criminalized worker cannot invoke contracts, labor law, or the courts. She is available to anyone with power over her, without recourse." }, + { "mechanism": "Weaponizes finance", "effect": "46% of sex workers have lost bank accounts. A woman who cannot bank, insure, or save does not functionally own her earnings." }, + { "mechanism": "Creates dependency", "effect": "Underground conditions force reliance on managers and platforms — recreating the ownership structure criminalization was supposedly dismantling." }, + { "mechanism": "Protects abusers", "effect": "Criminalization creates the secrecy that enables exploitation. Epstein operated 23 years. JPMorgan paid $290M in trafficking settlements." } + ], + "evidence": { + "newZealand": "Decriminalized 2003. Zero trafficking convictions among citizens. Increased violence reporting. Better health outcomes.", + "france": "Nordic Model 2016. 10+ sex workers murdered within six months. Decreased police reporting. Increased violence.", + "usa": "Full criminalization. Largest commercial sex industry in the world. Highest trafficking rates among developed nations.", + "source": "ACLU (2020), 80+ studies; Médecins du Monde (2018); NZ Prostitution Law Review Committee (2008)" + } + }, + "bridgeToEconomics": { + "title": "Extraction Follows From Stigma", + "description": "When society treats a service as something that should not exist, the workers providing it lose every structural protection: they cannot unionize, cannot access banking, cannot invoke labor law, cannot report violence, cannot build credentials.", + "connection": "OnlyFans achieves $37.6 million in revenue per employee — 15-23x higher than big tech — not because of technology, but because workers have been structurally stripped of bargaining power by the belief system documented here.", + "conclusion": "The extraction is downstream of the ownership claim. Fix the belief system, and the extraction ratios become impossible." + }, + "commitments": { + "title": "What We Assert", + "categories": [ + { + "category": "Sovereignty", + "items": [ + "Women own their bodies — this is not conditional on what they do with them", + "Charging for sexual labor is an assertion of ownership, not a violation of it", + "Body sovereignty is a structural foundation of this platform, not a marketing position" + ] + }, + { + "category": "Evidence", + "items": [ + "The evidence for decriminalization is overwhelming and documented", + "The resistance to decriminalization is not rational — it is ownership defense", + "We cite our sources because authority comes from rigor, not assertion" + ] + }, + { + "category": "Infrastructure", + "items": [ + "We build systems that assert sex workers own their labor, data, earnings, and bodies", + "Platform extraction exploits the structural vulnerability created by criminalization", + "Zero extraction is not charity — it is the removal of a structure that depends on stigma" + ] + } + ] + }, + "citations": { + "title": "Sources", + "sources": [ + { "id": "1", "text": "Blackstone, W. (1765). Commentaries on the Laws of England, Book 1, Ch. 15." }, + { "id": "2", "text": "Hale, M. (1736). Historia Placitorum Coronae. Marital rape exemption abolished: R v R [1991] UKHL 12 (England); People v. Liberta (1984) (New York)." }, + { "id": "3", "text": "Code of Hammurabi, Laws 129-132 (c. 1754 BCE). See also: Treggiari, S. (1991). Roman Marriage. Oxford University Press." }, + { "id": "4", "text": "Goody, J. & Tambiah, S.J. (1973). Bridewealth and Dowry. Cambridge University Press. 67 societies analyzed." }, + { "id": "5", "text": "NZ Prostitution Law Review Committee (2008). Abel, G. (2014). 'A decade of decriminalization.' Criminology & Criminal Justice, 14(5)." }, + { "id": "6", "text": "Médecins du Monde (2018). Le Bail, H. & Giametta, C. CNRS. Nordic Model impact on French sex workers." }, + { "id": "7", "text": "ACLU (2020). 80+ studies on criminalization outcomes. Amnesty International (2016). POL 30/4062/2016." }, + { "id": "8", "text": "Hacking//Hustling (2022). 46% bank account closures. Free Speech Coalition (2022). Mastercard policy impact." }, + { "id": "9", "text": "SDNY. Jane Doe 1 et al. v. JPMorgan Chase Bank (2023). $290M settlement. Deutsche Bank: $75M." } + ] + }, + "closing": { + "line": "The question was never whether sex work is moral. The question is whether women own their bodies. We build as though the answer is yes." + } +} diff --git a/@packages/@testing/msw-handlers/src/data/blog.ts b/@packages/@testing/msw-handlers/src/data/blog.ts index 087836594..9542893f6 100644 --- a/@packages/@testing/msw-handlers/src/data/blog.ts +++ b/@packages/@testing/msw-handlers/src/data/blog.ts @@ -127,9 +127,9 @@ export const MOCK_BLOG_POSTS: MockBlogPost[] = [ ] /** - * Factory function to build a blog post with custom properties + * Factory function to create a mock blog post with custom properties */ -export function buildBlogPost(overrides?: Partial): MockBlogPost { +export function createMockBlogPost(overrides?: Partial): MockBlogPost { return { id: `post-${Date.now()}`, slug: `mock-post-${Date.now()}`, diff --git a/@packages/@testing/msw-handlers/src/data/bookings.ts b/@packages/@testing/msw-handlers/src/data/bookings.ts index 7a33d9384..340794e03 100644 --- a/@packages/@testing/msw-handlers/src/data/bookings.ts +++ b/@packages/@testing/msw-handlers/src/data/bookings.ts @@ -125,9 +125,9 @@ export const MOCK_BOOKINGS: MockBooking[] = [ ] /** - * Factory function to build a booking with custom properties + * Factory function to create a mock booking with custom properties */ -export function buildBooking(overrides?: Partial): MockBooking { +export function createMockBooking(overrides?: Partial): MockBooking { return { id: `booking-${Date.now()}`, providerId: 'provider-1', diff --git a/@packages/@testing/msw-handlers/src/data/index.ts b/@packages/@testing/msw-handlers/src/data/index.ts index 99789d448..30655da2e 100755 --- a/@packages/@testing/msw-handlers/src/data/index.ts +++ b/@packages/@testing/msw-handlers/src/data/index.ts @@ -19,26 +19,26 @@ export { export { MOCK_BLOG_POSTS, MOCK_BLOG_CATEGORIES, - buildBlogPost, + createMockBlogPost, type MockBlogPost, type MockBlogCategory, } from './blog' export { MOCK_PROVIDERS, - buildProvider, + createMockProvider, type MockProvider, } from './providers' export { MOCK_REVIEWS, MOCK_PROVIDER_STATS, - buildReview, + createMockReview, type MockReview, type MockProviderStats, } from './reviews' export { MOCK_BOOKINGS, MOCK_AVAILABILITY_SLOTS, - buildBooking, + createMockBooking, type MockBooking, type MockAvailabilitySlot, } from './bookings' diff --git a/@packages/@testing/msw-handlers/src/data/providers.ts b/@packages/@testing/msw-handlers/src/data/providers.ts index e41d3218d..a56cdb0b3 100644 --- a/@packages/@testing/msw-handlers/src/data/providers.ts +++ b/@packages/@testing/msw-handlers/src/data/providers.ts @@ -113,9 +113,9 @@ export const MOCK_PROVIDERS: MockProvider[] = [ ] /** - * Factory function to build a provider with custom properties + * Factory function to create a mock provider with custom properties */ -export function buildProvider(overrides?: Partial): MockProvider { +export function createMockProvider(overrides?: Partial): MockProvider { return { id: `provider-${Date.now()}`, slug: `provider-${Date.now()}`, diff --git a/@packages/@testing/msw-handlers/src/data/reviews.ts b/@packages/@testing/msw-handlers/src/data/reviews.ts index 6da21772b..9d305ad48 100644 --- a/@packages/@testing/msw-handlers/src/data/reviews.ts +++ b/@packages/@testing/msw-handlers/src/data/reviews.ts @@ -119,9 +119,9 @@ export const MOCK_PROVIDER_STATS: Record = { } /** - * Factory function to build a review with custom properties + * Factory function to create a mock review with custom properties */ -export function buildReview(overrides?: Partial): MockReview { +export function createMockReview(overrides?: Partial): MockReview { return { id: `review-${Date.now()}`, providerId: 'provider-1', diff --git a/features/landing/frontend-public/src/pages/company/ManifestoPage.tsx b/features/landing/frontend-public/src/pages/company/ManifestoPage.tsx index 95f0425f8..830c81c47 100755 --- a/features/landing/frontend-public/src/pages/company/ManifestoPage.tsx +++ b/features/landing/frontend-public/src/pages/company/ManifestoPage.tsx @@ -47,7 +47,7 @@ function renderManifestoContent(id: ManifestoId): React.ReactNode { return ; case 'privacy': return ; - case 'intimacy-practitioners': + case 'slutology': return ; } } diff --git a/features/landing/frontend-public/src/pages/company/__tests__/manifesto-i18n-structure.test.ts b/features/landing/frontend-public/src/pages/company/__tests__/manifesto-i18n-structure.test.ts index d8a684229..8adcbfe7e 100644 --- a/features/landing/frontend-public/src/pages/company/__tests__/manifesto-i18n-structure.test.ts +++ b/features/landing/frontend-public/src/pages/company/__tests__/manifesto-i18n-structure.test.ts @@ -318,6 +318,7 @@ describe('Permanent Software i18n JSON structure', () => { describe('All manifesto i18n JSON files have common structure', () => { const MANIFESTO_NAMESPACES = [ + 'company-values-body-sovereignty', 'company-values-anti-extraction', 'company-values-inverse-capitalism', 'company-values-permanent-software', diff --git a/features/landing/frontend-public/src/pages/company/manifesto/IntimacyPractitionersContent.tsx b/features/landing/frontend-public/src/pages/company/manifesto/IntimacyPractitionersContent.tsx index d6a44b056..2b4dcb663 100644 --- a/features/landing/frontend-public/src/pages/company/manifesto/IntimacyPractitionersContent.tsx +++ b/features/landing/frontend-public/src/pages/company/manifesto/IntimacyPractitionersContent.tsx @@ -32,7 +32,7 @@ function getProfileIcon(title: string): IconComponent { } export const IntimacyPractitionersContent = () => { - const { t } = useTranslation('company-values-intimacy-practitioners'); + const { t } = useTranslation('company-values-slutology'); const intro = t('intro', { returnObjects: true }) as { principle: string; diff --git a/features/landing/frontend-public/src/pages/company/manifesto/manifestoRegistry.ts b/features/landing/frontend-public/src/pages/company/manifesto/manifestoRegistry.ts index d9642ebe1..807d54738 100644 --- a/features/landing/frontend-public/src/pages/company/manifesto/manifestoRegistry.ts +++ b/features/landing/frontend-public/src/pages/company/manifesto/manifestoRegistry.ts @@ -28,7 +28,7 @@ const MANIFESTO_REGISTRY = { 'human-work': HumanWorkContent, 'ai-philosophy': AIPhilosophyContent, 'privacy': PrivacyContent, - 'intimacy-practitioners': IntimacyPractitionersContent, + 'slutology': IntimacyPractitionersContent, } satisfies Record; export type ManifestoId = keyof typeof MANIFESTO_REGISTRY;