Reactory Data -- Agent Context
Documents the directory structure, plugin architecture, i18n, themes, email templates, and conventions for a data and CDN repository referenced at runtime by a server and client.
What this file does
Documents the directory structure, plugin architecture, i18n, themes, email templates, and conventions for a data and CDN repository referenced at runtime by a server and client.
When to use it
- Setting up a new Reactory platform instance that needs the data repository
- Understanding how plugins are structured and built in a monorepo
- Adding or modifying internationalization files for a Reactory project
- Creating workflow schedules or email templates for the Reactory platform
Assumes this stack
Reactory Data -- Agent Context
What Is This Project
Reactory Data (reactory-data) is the data, assets, and CDN repository for the Reactory platform. It provides baseline directory structures, fonts, themes, internationalization files, client plugin source code and runtime bundles, email templates, workflow schedules, database backups, AI learning resources, and static content.
This is not a typical application project. There is no root-level package.json and no application code at the root level. The Reactory server and client applications reference this directory at runtime via the $REACTORY_DATA and $REACTORY_PLUGINS environment variables.
Directory Structure
reactory-data/
builds/ # Uploaded build artifacts (gitignored)
content/ # Static HTML content served by StaticContent component
database/ # Database backup scripts and dumps
backups/ # Backup files
pg17_backup.sh # PostgreSQL 17 backup script
fonts/ # ~257 font files (TTF, OTF, FON, TTC)
# Used for server-side document generation (PDF, Excel)
forms/ # Form-related assets (images for form definitions)
images/
guideai/ # AI-powered learning/tutoring data
booktutor/
library/ # Book catalog, search index, books in Markdown
learning-paths/ # Learning path definitions
progress/ # Student progress tracking
resources/ # Educational resources
i18n/ # Internationalization translation files
en/ # English translations
en-US/ # US English translations
af/ # Afrikaans translations
imports/ # Import/data staging area
logging/ # Server log output (hourly JSON.gz files)
nginx/ # Nginx configuration placeholder
organization/ # Organization-specific data
plugins/ # CLIENT PLUGINS -- key workspace area (see below)
__runtime__/ # Runtime-compiled widget bundles
artifacts/ # Published core package tarballs (.tgz)
available.json # Plugin registry of installable plugins
graphiql/ # Embedded GraphiQL IDE
libs/ # Shared libraries (Three.js distribution)
reactory-client-core/ # Core client plugin (React components, Rollup)
reactor-client/ # Reactor-specific client plugin
reactor-system-navigator/ # 3D WebGL game/visualizer (Three.js, standalone app)
profiles/ # User avatars and AI persona data
default/ # Default avatar (default.png)
reactory/ # Reactory bot avatar
reactor/
personas/ # 16 AI persona directories with avatars
macros/ # Macro definitions
projects/ # Project definitions
tools/ # Tool definitions
templates/ # Template files
email/
defaults/
activation/ # Account activation email templates (.ejs)
forgot/ # Password reset email templates (.ejs)
shell/ # Shell script templates
themes/ # Application themes
reactory/ # Default theme (images/, styles.css, asciilogo.txt)
booktutor/ # BookTutor theme
socialeyes/ # SocialEyes theme
zepz/ # Zepz theme
tmp/ # Temporary files
wordnet/ # WordNet dictionary data for NLP features
dict/ # Full WordNet lexical database
workflows/ # Workflow definitions and schedules
catalog/ # Versioned workflow definitions by namespace
schedules/ # YAML cron schedule definitions
assets/ # Workflow assets
config/ # Workflow configuration
www/ # Web-served static files
Plugin Architecture
Overview
The plugins/ directory is the most complex area. It contains independently buildable TypeScript/React plugin projects and the runtime compilation workspace.
Plugin Naming Conventions
- Plugin FQN:
{namespace}.{PluginName}@{version}(e.g.,client-core.RReactoryClientCore@1.0.0) - Runtime widget source files:
source_{namespace}.{WidgetName}@{version}.tsx - Runtime widget compiled bundles:
rollup.{namespace}.{WidgetName}@{version}.js - Component registration:
reactory.registerComponent(nameSpace, name, version, component)
Plugin Projects
-
plugins/__runtime__/-- Runtime widget compilation workspace- Package:
@reactory/runtime-plugins - Build: Rollup + Babel + TypeScript
- Must run
npm installbefore the server can compile widgets - Contains source
.tsxand compiled.jsbundles
- Package:
-
plugins/reactory-client-core/-- Core client plugin (has its own.git)- Package:
@reactory/client-core-plugin - Build: Rollup (
rollup.config.cjs), outputs tolib/reactory.client.core.js - Components: Authentication, Develop, Froala, Organization, ReactoryClient, TemplateEditors, User
- Package:
-
plugins/reactor-client/-- Reactor-specific client plugin- Custom components in
src/components/
- Custom components in
-
plugins/reactor-system-navigator/-- Standalone 3D game/visualizer (has its own.git)- Package:
reactor-system-navigator - Tech: Three.js, TypeScript, Express, Jest, Inversify
- ESM module, runs with
node server.js
- Package:
-
plugins/artifacts/-- Published core package tarballs- Contains versioned
.tgzfiles of@reactorynet/reactory-core
- Contains versioned
Plugin Build System
Each plugin has its own package.json, tsconfig.json, and rollup.config.cjs:
- Build tool: Rollup with Babel + TypeScript
- Output format: UMD
- React 17.0.2 as peer dependency
- MUI v5-v6 for UI components
- TypeScript target: ES2017-ES2018, module ESNext, JSX preserve
- Node version: 20.19.4 (
.nvmrc)
Internationalization (i18n)
- Locales:
en,en-US,af(Afrikaans) - File format: JSON, one file per namespace per locale
- Namespace files:
reactory.json,common.json,forms.json,reactor.json,booktutor.json,zepz-engineer.json,socialeyes.json,zepz.json - Key format:
{namespace}.{context}.{key}(e.g.,reactory.menu.documentation,support-ticket.model.status.new) - Git tracking: Only
*/reactory.jsonfiles are tracked; others are gitignored
Workflow Schedules
YAML files in workflows/schedules/ define cron-based workflow execution:
id: "unique-id"
name: "Schedule Name"
description: "What this schedule does"
workflow:
id: "workflow-id"
version: "1.0.0"
nameSpace: "namespace"
schedule:
cron: "0 */1 * * *"
timezone: "UTC"
enabled: true
properties: {}
retry: { maxAttempts: 3, delay: 5000 }
timeout: 300000
maxConcurrent: 1
Workflow reference format: {namespace}.{WorkflowName}@{version}
Theme Structure
Each theme directory contains:
images/-- Theme-specific images (logos, backgrounds)styles.css-- Theme-specific CSS- The
reactorytheme also includesasciilogo.txt
Email Templates
- Located in
templates/email/defaults/ - Use EJS templating (
.ejsfiles) - Organized by function:
activation/(account activation),forgot/(password reset)
Conventions
- No application logic at the root level -- this is a data store
- Organize assets by type in the correct subdirectory
- Use readme files to describe folder contents
- Use
.gitignoreto exclude large, generated, or runtime files - Reference assets from other projects using
$REACTORY_DATAand$REACTORY_PLUGINS - Sub-projects in
plugins/have their own.gitrepositories
Environment Variables
REACTORY_DATA # Path to this directory
REACTORY_PLUGINS # Path to this directory's plugins/ subdirectory
Git Tracking Notes
Most runtime and generated content is excluded from git. What IS tracked:
- Directory structure placeholders (readme files)
- i18n
reactory.jsonfiles (other namespace translations are gitignored) - Default profiles and organizations
- Plugin source code
- Theme files, font files, email templates
- Workflow schedules and catalog definitions
What's inside
Directory tree, 5 plugin projects, 3 locales, 8 i18n namespaces, 2 email template groups, 4 themes, YAML schedule format
Change this for your project
- Replace
reactory-datawith your own repository name - Replace
$REACTORY_DATAand$REACTORY_PLUGINSwith your own environment variable names - Replace
@reactory/runtime-pluginswith your own package name - Replace
reactoryinreactory.menu.documentationwith your own namespace
Where it goes
Save as AGENTS.md in your repository root. Read by Codex, Cursor and other agents that follow the AGENTS.md convention.
Worth borrowing
- Separating data and assets from application code into a dedicated repository referenced via environment variables
- Using a plugin registry (
available.json) and runtime compilation workspace for dynamic widget loading - Organizing i18n by namespace per locale with a consistent key format
Related Documents
Browser-only development
Guides AI assistants on an Electron + React + TypeScript desktop app for browsing and organizing AI-generated images locally.
Claude Agents — Reference & Recommendations
Catalogues 40+ Claude agents and marketing skills for building a cat adoption charity landing page, with a ready-to-paste prompt and backend API reference.
Golden DKG Prototype -- Master Plan
Defines an 8-phase implementation plan for a Rust prototype of the Golden non-interactive DKG protocol using BLS12-381 and tokio.
Swarms Examples Index
Lists 60+ example scripts for building single and multi-agent systems with the Swarms framework, organized by category and use case.