# HabitusNet > Autonomous publishing engine for regulated industries. - Production: https://habitus.net - Images CDN: https://images.habitus.net - Full docs: https://habitus.net/llms-full.txt - Design token upstream: https://brandsyncup.com/.well-known/llms.txt ## What this is HabitusNet is a multi-tenant platform where team members provide content directions and the system generates articles, visuals, SEO, and social distribution in each person's professional voice. It runs on Cloudflare Workers with React 19, Neon PostgreSQL, and Firebase Auth. The platform will be spun out as a standalone unbranded CMS product. HabitusNet is the first instance (reference implementation). Every brand-level decision is overridable. ## Design system status (2026-03-31) Honest status: the design system has two layers (platform-agnostic + instance brand) and a three-tier theme override (platform defaults < instance brand < cultural content themes). The implementation in this repo is ahead of the upstream package (@brandsync/cultural-design-tokens in the brand-sync-up repo), which currently has mock data only. Theme switching was partially broken until 2026-03-30. What works now: - Semantic token system in CSS custom properties (src/design-system/tokens/core-modern.css) - 8 cultural theme TypeScript files (Swiss, Nihon, Bauhaus, Modern Minimal, Celtic, Mediterranean, Indian Rangoli, African Ubuntu) - Server-side theme CSS injection via middleware (prevents FOUC) - Dark mode on admin dashboard - DTCG pipeline in database (dtcg_tokens JSONB column, brand_token_sets table with T0/T1/T2 governance) What's not connected yet: - The @brandsync/cultural-design-tokens package is not published or consumed by this repo - Theme switching in the public-facing site is not fully tested end-to-end - Subdomain projects cannot yet import tokens from a shared package ## For subdomain projects If you are building a subdomain project (e.g., itaqq.habitus.net), you need: ### Auth - Firebase Auth, Google OAuth - Tenant ID: habitusnet-admin-qvedx - Project ID: habitus-net - Header: Authorization: Bearer FIREBASE_ID_TOKEN ### Database - Neon PostgreSQL, habitus.* schema for app data - RLS enforced via tenant-context.ts (sets session variables) - Never bypass RLS ### Images - R2 bucket: habitus-images at images.habitus.net - Tenant paths: orgs/{org_id}/... - AI images: ai-generated/{timestamp}.png - Resize on delivery: /cdn-cgi/image/width=W,format=webp/{key} ### Design tokens (current state) - Use semantic tokens: bg-primary, text-destructive, border-info/20 - Never hardcode: bg-green-500, text-red-600 - Token source: src/design-system/tokens/core-modern.css (RGB format for alpha) - Until the shared package is published, copy the CSS file or reference DESIGN.md ### HabitusNet brand values (instance layer) - Surface: #F5F0E8 (warm parchment, NOT cool gray) - Primary: #000000 - Accent: #C4440A (burnt cadmium) - Fonts: Satoshi (display), DM Sans (body), JetBrains Mono (data) - Border radius: 4px default (tight, not bubbly) - Brand mark: HABITUS|NET with broken pipe U+00A6 (logo only, never UI decoration) ### API - Base: https://habitus.net/api/* - JSON + CORS - Rate limit: 100 req/min default - AI endpoints: 5-10 req/min ## Tech stack - TypeScript on Cloudflare Workers - React 19, Vite 7, Tailwind 3.4, shadcn/ui - Neon PostgreSQL (serverless) - Firebase Identity Platform - Google Gemini (Imagen 4 images, 2.0 Flash video) - Cloudflare R2 (images.habitus.net) - Stripe billing - Sentry + PostHog - Doppler secrets