From 334e31998b49fb251257c4957c952cb42def7348 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 17:25:05 +0200 Subject: [PATCH 01/25] Added onDestroy event --- ModuleClientAPI.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ModuleClientAPI.md b/ModuleClientAPI.md index 3f718ce..05d37b4 100644 --- a/ModuleClientAPI.md +++ b/ModuleClientAPI.md @@ -56,6 +56,18 @@ api.finishClientCondition(conditionId); ## Events +### onDestroy + +Register a listener for when the module is destroyed from the scene. Make sure you stop your clocks and render loops here. + +```javascript +api.onDestroy(callback); +``` + +| Argument | Type | Description | +| -------- | ------------------ | ------------------------------------------------------------ | +| callback | ( value:any ):void | Function that will be called when the module gets destroyed. | + ### onPropertyUpdate Register a listener for when a property updates in a scene change. From 8789da9f1508278aa327c7cba3df511c388e51bb Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 17:25:41 +0200 Subject: [PATCH 02/25] Updated specs --- ModuleClientAPI.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ModuleClientAPI.md b/ModuleClientAPI.md index 05d37b4..492f2c4 100644 --- a/ModuleClientAPI.md +++ b/ModuleClientAPI.md @@ -64,9 +64,9 @@ Register a listener for when the module is destroyed from the scene. Make sure y api.onDestroy(callback); ``` -| Argument | Type | Description | -| -------- | ------------------ | ------------------------------------------------------------ | -| callback | ( value:any ):void | Function that will be called when the module gets destroyed. | +| Argument | Type | Description | +| -------- | -------- | ------------------------------------------------------------ | +| callback | ( ):void | Function that will be called when the module gets destroyed. | ### onPropertyUpdate From 2cb9ff5862ac54599bbba0f90a20657a7de99306 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 17:49:00 +0200 Subject: [PATCH 03/25] Added introduction --- ModuleClientAPI.md | 125 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 124 insertions(+), 1 deletion(-) diff --git a/ModuleClientAPI.md b/ModuleClientAPI.md index 492f2c4..cebc997 100644 --- a/ModuleClientAPI.md +++ b/ModuleClientAPI.md @@ -1,6 +1,129 @@ # ModuleClientAPI -Class representing the ModuleClientAPI. +## Introductions + +The **ModuleClientAPI** is the heart of every interactive Getiyo module's front-end experience. When users visit your channel and see your module in action, they're interacting with code powered by this comprehensive client-side interface. Think of it as your module's direct connection to the Getiyo ecosystem—enabling real-time communication with your server-side logic, responding instantly to property changes from the editor, and creating seamless user experiences that feel native to the platform. + +### What Makes ModuleClientAPI Essential + +Every Getiyo module consists of two primary components: server-side logic that handles data processing and business rules, and client-side presentation that users actually see and interact with. The ModuleClientAPI bridges these two worlds, automatically establishing a persistent connection between your module's user interface and its corresponding [`ModuleServerAPI`](./ModuleServerAPI). This connection enables the real-time interactivity that makes Getiyo modules feel alive and responsive. + +When you develop a module's user page, the ModuleClientAPI is automatically available as a global `api` object. This isn't just a simple communication tool—it's a comprehensive interface that understands Getiyo's unique architecture of scenes, displays, properties, and user management. Unlike traditional web development where you might manually handle WebSocket connections or polling for updates, the ModuleClientAPI abstracts away these complexities while providing powerful features specifically designed for Getiyo's live, collaborative environment. + +### Real-Time Property Updates + +One of the most powerful features of the ModuleClientAPI is its ability to receive live property updates through [`api.onPropertyUpdate()`](./ModuleClientAPI#onpropertyupdate). When someone editing a scene changes a color, updates text, or modifies any reference property of your module, those changes flow instantly to all connected viewers without requiring module redeployment or page refreshes. This creates an incredibly smooth content creation workflow where editors can see their changes reflected immediately across all displays. + +This real-time capability extends beyond simple property updates. The ModuleClientAPI automatically handles the complexity of managing multiple module instances, ensuring that property updates reach the correct module references even when the same module type appears multiple times in a single scene. Your code simply registers listeners for the properties it cares about, and the API handles all the routing and synchronization behind the scenes. + +### Seamless Communication + +Communication between your module's client and server components flows through intuitive message-passing methods. The [`api.send()`](./ModuleClientAPI#send) function allows you to transmit any data to your server-side code, while [`api.on()`](./ModuleClientAPI#on) lets you listen for responses or server-initiated messages. This bidirectional communication happens over persistent connections that the API manages automatically, including reconnection handling and message queuing during temporary network interruptions. + +The communication system also supports interaction between neighboring modules through [`api.onNeighborMessage()`](./ModuleClientAPI#onneighbormessage) and [`api.getNeighbors()`](./ModuleClientAPI#getneighbors). This enables sophisticated module ecosystems where different components can coordinate their behavior, share state, or trigger cascading effects across a scene. + +### User-Centric Design + +Getiyo's strength lies in its understanding that every viewer is a unique user with specific capabilities, preferences, and context. The ModuleClientAPI provides deep integration with Getiyo's user management system through [`api.getUser()`](./ModuleClientAPI#getuser). Your module can access user details, check device capabilities, and adapt its interface accordingly—whether someone is viewing on a mobile device, has specific accessibility needs, or belongs to a particular organization. + +The user integration goes beyond simple profile access. Methods like [`api.getUser().getName()`](./ModuleClientAPIUser#getname) can automatically prompt users to enter their name if they haven't already, creating seamless onboarding experiences. Camera and microphone access, mobile device detection, and user preference management are all handled through consistent, reliable interfaces that respect Getiyo's privacy and permission models. + +### Module Scope and Safety + +Traditional web development often struggles with scope management when multiple components share a page. The ModuleClientAPI solves this elegantly by providing module-scoped access to DOM elements through [`api.dom()`](./ModuleClientAPI#dom). Instead of using `document.querySelector()` which might accidentally select elements from other modules, you always query within your module's specific container. This prevents conflicts and ensures your module remains self-contained and reusable. + +Similarly, instead of listening to global `window` resize events, you use [`api.onResize()`](./ModuleClientAPI#onresize) to receive notifications when your specific module changes size. This module-scoped approach extends throughout the API, ensuring that your code remains robust even in complex scenes with multiple active modules. + +#### CSS and Sass Development + +The module scoping philosophy extends to your styling approach as well. While Getiyo provides automatic isolation between modules, you must structure your HTML and CSS properly to take advantage of this system. This means you should **never write global CSS** that targets elements like `body`, `html`, `p`, or `h1` directly. + +Instead, you need to create a main container element in your module's HTML with a descriptive class name, then scope all your CSS and Sass to that container: + +```html + +
+

My Module Title

+
+ +
+
+``` + +```scss +// ❌ NEVER do this - affects all modules globally +body { + font-family: Arial, sans-serif; +} + +h1 { + color: red; +} + +// ✅ ALWAYS scope to your module's container class +.my-awesome-module { + font-family: Arial, sans-serif; + + h1 { + color: red; + font-size: 24px; + } + + .content-area { + padding: 20px; + + .action-button { + background: blue; + color: white; + border: none; + padding: 10px 20px; + border-radius: 4px; + } + } +} +``` + +This scoping approach ensures that: + +- **Multiple module instances** can coexist without style conflicts +- **Different module types** won't interfere with each other's appearance +- **Global Getiyo styling** remains intact and functional +- **Module reusability** is maintained across different scenes and channels + +Remember that Getiyo provides global styling for module containers including backgrounds, filters, blending modes, borders, and padding. Your module's CSS should focus on the internal layout and styling of your content within your own container class, not these container-level properties that Getiyo manages automatically. + +### Timing and Synchronization + +Live experiences require precise timing coordination across multiple displays and users. The ModuleClientAPI provides server-synchronized time through [`api.getTime()`](./ModuleClientAPI#gettime), ensuring that time-based animations, countdowns, and coordinated actions happen simultaneously across all viewers regardless of their local clock settings or network latency. + +The API also includes sophisticated timing utilities through [`api.GameLib.Timing`](./ModuleClientAPI#gametiming), offering easing functions, animation helpers, and frame-based timing tools that integrate seamlessly with Getiyo's rendering pipeline. These tools enable smooth, professional animations that feel native to the platform while maintaining perfect synchronization across all connected displays. + +### Integration with Getiyo's Ecosystem + +The ModuleClientAPI doesn't exist in isolation—it's deeply integrated with Getiyo's broader ecosystem of cue lists, conditions, snapshots, and show control. Your module can participate in automated sequences by finishing client conditions with [`api.finishClientCondition()`](./ModuleClientAPI#finishclientcondition), respond to volume changes and play state updates, and maintain and recall states through the runtime storage system. + +Global utilities like [`ce`](./ModuleClientAPI#ce) for quick element creation, [`Feedback`](./ModuleClientAPI#feedback) for system-consistent notifications, and [`loading`](./ModuleClientAPI#loading) indicators ensure your module feels like a natural part of the Getiyo experience rather than a separate component. + +### Getting Started + +Every module automatically has access to the ModuleClientAPI through the global `api` object. Your journey typically begins with setting up property listeners and communication handlers: + +```javascript +// React to property changes from the editor +api.onPropertyUpdate('backgroundColor', (color) => { + api.dom().style.backgroundColor = color; +}); + +// Communicate with your server-side logic +api.send('userAction', { type: 'click' }); + +// Listen for server responses +api.on('updateDisplay', (data) => { + // Update your module's presentation +}); +``` + +The ModuleClientAPI transforms what could be complex, error-prone web development into an intuitive, powerful experience that lets you focus on creating engaging content rather than managing infrastructure. Whether you're building simple informational displays or complex interactive experiences, the API provides the foundation for professional, reliable modules that integrate seamlessly with Getiyo's live production environment. ## Sub Classes From 14569b000e8bc511c20d746f1461c50419b2cce8 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 17:53:56 +0200 Subject: [PATCH 04/25] Added seperate page for docs --- ModuleClientAPI.md | 127 +-------------------------------- ModuleClientAPIIntroduction.md | 124 ++++++++++++++++++++++++++++++++ _Sidebar.md | 7 +- 3 files changed, 129 insertions(+), 129 deletions(-) create mode 100644 ModuleClientAPIIntroduction.md diff --git a/ModuleClientAPI.md b/ModuleClientAPI.md index cebc997..a0c7ef5 100644 --- a/ModuleClientAPI.md +++ b/ModuleClientAPI.md @@ -1,129 +1,4 @@ -# ModuleClientAPI - -## Introductions - -The **ModuleClientAPI** is the heart of every interactive Getiyo module's front-end experience. When users visit your channel and see your module in action, they're interacting with code powered by this comprehensive client-side interface. Think of it as your module's direct connection to the Getiyo ecosystem—enabling real-time communication with your server-side logic, responding instantly to property changes from the editor, and creating seamless user experiences that feel native to the platform. - -### What Makes ModuleClientAPI Essential - -Every Getiyo module consists of two primary components: server-side logic that handles data processing and business rules, and client-side presentation that users actually see and interact with. The ModuleClientAPI bridges these two worlds, automatically establishing a persistent connection between your module's user interface and its corresponding [`ModuleServerAPI`](./ModuleServerAPI). This connection enables the real-time interactivity that makes Getiyo modules feel alive and responsive. - -When you develop a module's user page, the ModuleClientAPI is automatically available as a global `api` object. This isn't just a simple communication tool—it's a comprehensive interface that understands Getiyo's unique architecture of scenes, displays, properties, and user management. Unlike traditional web development where you might manually handle WebSocket connections or polling for updates, the ModuleClientAPI abstracts away these complexities while providing powerful features specifically designed for Getiyo's live, collaborative environment. - -### Real-Time Property Updates - -One of the most powerful features of the ModuleClientAPI is its ability to receive live property updates through [`api.onPropertyUpdate()`](./ModuleClientAPI#onpropertyupdate). When someone editing a scene changes a color, updates text, or modifies any reference property of your module, those changes flow instantly to all connected viewers without requiring module redeployment or page refreshes. This creates an incredibly smooth content creation workflow where editors can see their changes reflected immediately across all displays. - -This real-time capability extends beyond simple property updates. The ModuleClientAPI automatically handles the complexity of managing multiple module instances, ensuring that property updates reach the correct module references even when the same module type appears multiple times in a single scene. Your code simply registers listeners for the properties it cares about, and the API handles all the routing and synchronization behind the scenes. - -### Seamless Communication - -Communication between your module's client and server components flows through intuitive message-passing methods. The [`api.send()`](./ModuleClientAPI#send) function allows you to transmit any data to your server-side code, while [`api.on()`](./ModuleClientAPI#on) lets you listen for responses or server-initiated messages. This bidirectional communication happens over persistent connections that the API manages automatically, including reconnection handling and message queuing during temporary network interruptions. - -The communication system also supports interaction between neighboring modules through [`api.onNeighborMessage()`](./ModuleClientAPI#onneighbormessage) and [`api.getNeighbors()`](./ModuleClientAPI#getneighbors). This enables sophisticated module ecosystems where different components can coordinate their behavior, share state, or trigger cascading effects across a scene. - -### User-Centric Design - -Getiyo's strength lies in its understanding that every viewer is a unique user with specific capabilities, preferences, and context. The ModuleClientAPI provides deep integration with Getiyo's user management system through [`api.getUser()`](./ModuleClientAPI#getuser). Your module can access user details, check device capabilities, and adapt its interface accordingly—whether someone is viewing on a mobile device, has specific accessibility needs, or belongs to a particular organization. - -The user integration goes beyond simple profile access. Methods like [`api.getUser().getName()`](./ModuleClientAPIUser#getname) can automatically prompt users to enter their name if they haven't already, creating seamless onboarding experiences. Camera and microphone access, mobile device detection, and user preference management are all handled through consistent, reliable interfaces that respect Getiyo's privacy and permission models. - -### Module Scope and Safety - -Traditional web development often struggles with scope management when multiple components share a page. The ModuleClientAPI solves this elegantly by providing module-scoped access to DOM elements through [`api.dom()`](./ModuleClientAPI#dom). Instead of using `document.querySelector()` which might accidentally select elements from other modules, you always query within your module's specific container. This prevents conflicts and ensures your module remains self-contained and reusable. - -Similarly, instead of listening to global `window` resize events, you use [`api.onResize()`](./ModuleClientAPI#onresize) to receive notifications when your specific module changes size. This module-scoped approach extends throughout the API, ensuring that your code remains robust even in complex scenes with multiple active modules. - -#### CSS and Sass Development - -The module scoping philosophy extends to your styling approach as well. While Getiyo provides automatic isolation between modules, you must structure your HTML and CSS properly to take advantage of this system. This means you should **never write global CSS** that targets elements like `body`, `html`, `p`, or `h1` directly. - -Instead, you need to create a main container element in your module's HTML with a descriptive class name, then scope all your CSS and Sass to that container: - -```html - -
-

My Module Title

-
- -
-
-``` - -```scss -// ❌ NEVER do this - affects all modules globally -body { - font-family: Arial, sans-serif; -} - -h1 { - color: red; -} - -// ✅ ALWAYS scope to your module's container class -.my-awesome-module { - font-family: Arial, sans-serif; - - h1 { - color: red; - font-size: 24px; - } - - .content-area { - padding: 20px; - - .action-button { - background: blue; - color: white; - border: none; - padding: 10px 20px; - border-radius: 4px; - } - } -} -``` - -This scoping approach ensures that: - -- **Multiple module instances** can coexist without style conflicts -- **Different module types** won't interfere with each other's appearance -- **Global Getiyo styling** remains intact and functional -- **Module reusability** is maintained across different scenes and channels - -Remember that Getiyo provides global styling for module containers including backgrounds, filters, blending modes, borders, and padding. Your module's CSS should focus on the internal layout and styling of your content within your own container class, not these container-level properties that Getiyo manages automatically. - -### Timing and Synchronization - -Live experiences require precise timing coordination across multiple displays and users. The ModuleClientAPI provides server-synchronized time through [`api.getTime()`](./ModuleClientAPI#gettime), ensuring that time-based animations, countdowns, and coordinated actions happen simultaneously across all viewers regardless of their local clock settings or network latency. - -The API also includes sophisticated timing utilities through [`api.GameLib.Timing`](./ModuleClientAPI#gametiming), offering easing functions, animation helpers, and frame-based timing tools that integrate seamlessly with Getiyo's rendering pipeline. These tools enable smooth, professional animations that feel native to the platform while maintaining perfect synchronization across all connected displays. - -### Integration with Getiyo's Ecosystem - -The ModuleClientAPI doesn't exist in isolation—it's deeply integrated with Getiyo's broader ecosystem of cue lists, conditions, snapshots, and show control. Your module can participate in automated sequences by finishing client conditions with [`api.finishClientCondition()`](./ModuleClientAPI#finishclientcondition), respond to volume changes and play state updates, and maintain and recall states through the runtime storage system. - -Global utilities like [`ce`](./ModuleClientAPI#ce) for quick element creation, [`Feedback`](./ModuleClientAPI#feedback) for system-consistent notifications, and [`loading`](./ModuleClientAPI#loading) indicators ensure your module feels like a natural part of the Getiyo experience rather than a separate component. - -### Getting Started - -Every module automatically has access to the ModuleClientAPI through the global `api` object. Your journey typically begins with setting up property listeners and communication handlers: - -```javascript -// React to property changes from the editor -api.onPropertyUpdate('backgroundColor', (color) => { - api.dom().style.backgroundColor = color; -}); - -// Communicate with your server-side logic -api.send('userAction', { type: 'click' }); - -// Listen for server responses -api.on('updateDisplay', (data) => { - // Update your module's presentation -}); -``` - -The ModuleClientAPI transforms what could be complex, error-prone web development into an intuitive, powerful experience that lets you focus on creating engaging content rather than managing infrastructure. Whether you're building simple informational displays or complex interactive experiences, the API provides the foundation for professional, reliable modules that integrate seamlessly with Getiyo's live production environment. +# ModuleClientAPI - Main ## Sub Classes diff --git a/ModuleClientAPIIntroduction.md b/ModuleClientAPIIntroduction.md new file mode 100644 index 0000000..b4732c0 --- /dev/null +++ b/ModuleClientAPIIntroduction.md @@ -0,0 +1,124 @@ +# ModuleClientAPI - Introductions + +The **ModuleClientAPI** is the heart of every interactive Getiyo module's front-end experience. When users visit your channel and see your module in action, they're interacting with code powered by this comprehensive client-side interface. Think of it as your module's direct connection to the Getiyo ecosystem—enabling real-time communication with your server-side logic, responding instantly to property changes from the editor, and creating seamless user experiences that feel native to the platform. + +## What Makes ModuleClientAPI Essential + +Every Getiyo module consists of two primary components: server-side logic that handles data processing and business rules, and client-side presentation that users actually see and interact with. The ModuleClientAPI bridges these two worlds, automatically establishing a persistent connection between your module's user interface and its corresponding [`ModuleServerAPI`](./ModuleServerAPI). This connection enables the real-time interactivity that makes Getiyo modules feel alive and responsive. + +When you develop a module's user page, the ModuleClientAPI is automatically available as a global `api` object. This isn't just a simple communication tool—it's a comprehensive interface that understands Getiyo's unique architecture of scenes, displays, properties, and user management. Unlike traditional web development where you might manually handle WebSocket connections or polling for updates, the ModuleClientAPI abstracts away these complexities while providing powerful features specifically designed for Getiyo's live, collaborative environment. + +## Real-Time Property Updates + +One of the most powerful features of the ModuleClientAPI is its ability to receive live property updates through [`api.onPropertyUpdate()`](./ModuleClientAPI#onpropertyupdate). When someone editing a scene changes a color, updates text, or modifies any reference property of your module, those changes flow instantly to all connected viewers without requiring module redeployment or page refreshes. This creates an incredibly smooth content creation workflow where editors can see their changes reflected immediately across all displays. + +This real-time capability extends beyond simple property updates. The ModuleClientAPI automatically handles the complexity of managing multiple module instances, ensuring that property updates reach the correct module references even when the same module type appears multiple times in a single scene. Your code simply registers listeners for the properties it cares about, and the API handles all the routing and synchronization behind the scenes. + +## Seamless Communication + +Communication between your module's client and server components flows through intuitive message-passing methods. The [`api.send()`](./ModuleClientAPI#send) function allows you to transmit any data to your server-side code, while [`api.on()`](./ModuleClientAPI#on) lets you listen for responses or server-initiated messages. This bidirectional communication happens over persistent connections that the API manages automatically, including reconnection handling and message queuing during temporary network interruptions. + +The communication system also supports interaction between neighboring modules through [`api.onNeighborMessage()`](./ModuleClientAPI#onneighbormessage) and [`api.getNeighbors()`](./ModuleClientAPI#getneighbors). This enables sophisticated module ecosystems where different components can coordinate their behavior, share state, or trigger cascading effects across a scene. + +## User-Centric Design + +Getiyo's strength lies in its understanding that every viewer is a unique user with specific capabilities, preferences, and context. The ModuleClientAPI provides deep integration with Getiyo's user management system through [`api.getUser()`](./ModuleClientAPI#getuser). Your module can access user details, check device capabilities, and adapt its interface accordingly—whether someone is viewing on a mobile device, has specific accessibility needs, or belongs to a particular organization. + +The user integration goes beyond simple profile access. Methods like [`api.getUser().getName()`](./ModuleClientAPIUser#getname) can automatically prompt users to enter their name if they haven't already, creating seamless onboarding experiences. Camera and microphone access, mobile device detection, and user preference management are all handled through consistent, reliable interfaces that respect Getiyo's privacy and permission models. + +## Module Scope and Safety + +Traditional web development often struggles with scope management when multiple components share a page. The ModuleClientAPI solves this elegantly by providing module-scoped access to DOM elements through [`api.dom()`](./ModuleClientAPI#dom). Instead of using `document.querySelector()` which might accidentally select elements from other modules, you always query within your module's specific container. This prevents conflicts and ensures your module remains self-contained and reusable. + +Similarly, instead of listening to global `window` resize events, you use [`api.onResize()`](./ModuleClientAPI#onresize) to receive notifications when your specific module changes size. This module-scoped approach extends throughout the API, ensuring that your code remains robust even in complex scenes with multiple active modules. + +### CSS and Sass Development + +The module scoping philosophy extends to your styling approach as well. While Getiyo provides automatic isolation between modules, you must structure your HTML and CSS properly to take advantage of this system. This means you should **never write global CSS** that targets elements like `body`, `html`, `p`, or `h1` directly. + +Instead, you need to create a main container element in your module's HTML with a descriptive class name, then scope all your CSS and Sass to that container: + +```html + +
+

My Module Title

+
+ +
+
+``` + +```scss +// ❌ NEVER do this - affects all modules globally +body { + font-family: Arial, sans-serif; +} + +h1 { + color: red; +} + +// ✅ ALWAYS scope to your module's container class +.my-awesome-module { + font-family: Arial, sans-serif; + + h1 { + color: red; + font-size: 24px; + } + + .content-area { + padding: 20px; + + .action-button { + background: blue; + color: white; + border: none; + padding: 10px 20px; + border-radius: 4px; + } + } +} +``` + +This scoping approach ensures that: + +- **Multiple module instances** can coexist without style conflicts +- **Different module types** won't interfere with each other's appearance +- **Global Getiyo styling** remains intact and functional +- **Module reusability** is maintained across different scenes and channels + +Remember that Getiyo provides global styling for module containers including backgrounds, filters, blending modes, borders, and padding. Your module's CSS should focus on the internal layout and styling of your content within your own container class, not these container-level properties that Getiyo manages automatically. + +## Timing and Synchronization + +Live experiences require precise timing coordination across multiple displays and users. The ModuleClientAPI provides server-synchronized time through [`api.getTime()`](./ModuleClientAPI#gettime), ensuring that time-based animations, countdowns, and coordinated actions happen simultaneously across all viewers regardless of their local clock settings or network latency. + +The API also includes sophisticated timing utilities through [`api.GameLib.Timing`](./ModuleClientAPI#gametiming), offering easing functions, animation helpers, and frame-based timing tools that integrate seamlessly with Getiyo's rendering pipeline. These tools enable smooth, professional animations that feel native to the platform while maintaining perfect synchronization across all connected displays. + +## Integration with Getiyo's Ecosystem + +The ModuleClientAPI doesn't exist in isolation—it's deeply integrated with Getiyo's broader ecosystem of cue lists, conditions, snapshots, and show control. Your module can participate in automated sequences by finishing client conditions with [`api.finishClientCondition()`](./ModuleClientAPI#finishclientcondition), respond to volume changes and play state updates, and maintain and recall states through the runtime storage system. + +Global utilities like [`ce`](./ModuleClientAPI#ce) for quick element creation, [`Feedback`](./ModuleClientAPI#feedback) for system-consistent notifications, and [`loading`](./ModuleClientAPI#loading) indicators ensure your module feels like a natural part of the Getiyo experience rather than a separate component. + +## Getting Started + +Every module automatically has access to the ModuleClientAPI through the global `api` object. Your journey typically begins with setting up property listeners and communication handlers: + +```javascript +// React to property changes from the editor +api.onPropertyUpdate('backgroundColor', (color) => { + api.dom().style.backgroundColor = color; +}); + +// Communicate with your server-side logic +api.send('userAction', { type: 'click' }); + +// Listen for server responses +api.on('updateDisplay', (data) => { + // Update your module's presentation +}); +``` + +The ModuleClientAPI transforms what could be complex, error-prone web development into an intuitive, powerful experience that lets you focus on creating engaging content rather than managing infrastructure. Whether you're building simple informational displays or complex interactive experiences, the API provides the foundation for professional, reliable modules that integrate seamlessly with Getiyo's live production environment. diff --git a/_Sidebar.md b/_Sidebar.md index ba275bc..8c45b5e 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -12,16 +12,16 @@ - [Complete Example](./module.json) - [Development environment/Building](./ModuleEnvironment) - [GetiyoModuleTool](./GetiyoModuleTool) - - [ModuleClientAPI](./ModuleClientAPI) - - [Important Principals](./ModuleClientAPIPrincipals) + - [ModuleClientAPI](./ModuleClientAPIIntroduction) + - [Documentation](./ModuleClientAPI) - [User](./ModuleClientAPIUser) - [Neighbor](./ModuleClientAPINeighbor) - [Neighbor Results](./ModuleClientAPINeighborResults) - [GameLib](./ModuleClientAPIGameLib) - [Controller](./ModuleClientAPIGameLibController) + - [Important Principals](./ModuleClientAPIPrincipals) - [ModuleServerAPI](./ModuleServerAPI) - - [Important Principals](./ModuleServerAPIPrincipals) - [Client](./ModuleServerAPIClient) - [Property](./ModuleServerAPIProperty) - [GameLib](./ModuleServerAPIGameLib) @@ -32,6 +32,7 @@ - [Details](./ModuleServerAPIGameLibScoreboardDetails) - [State](./ModuleServerAPIGameLibScoreboardState) - [GameLib CollisionSpace](./ModuleServerAPIGameLibCollisionSpace) + - [Important Principals](./ModuleServerAPIPrincipals) - [Libs](./ModuleServerAPILibs) - [LibWebSocket](./ModuleServerAPILibsWebSocketLib) - [Axios](https://axios-http.com/docs/instance) From 1e32714d67f2d43c5b22486ab42aba29be4d4555 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 17:54:36 +0200 Subject: [PATCH 05/25] Testing --- _Sidebar.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/_Sidebar.md b/_Sidebar.md index 8c45b5e..5c718c4 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -12,6 +12,12 @@ - [Complete Example](./module.json) - [Development environment/Building](./ModuleEnvironment) - [GetiyoModuleTool](./GetiyoModuleTool) + + - [Bug/Feature Reporting](./Reporting) + - [Contact Details](./ContactDetails) + +# he;;p + - [ModuleClientAPI](./ModuleClientAPIIntroduction) - [Documentation](./ModuleClientAPI) - [User](./ModuleClientAPIUser) @@ -47,6 +53,3 @@ - [GameLib Ratio](./ModuleAPIGameLibRatio) - [Module Debugging](./ModuleDebugging) - [ModuleStore](./ModuleStore) - -- [Bug/Feature Reporting](./Reporting) -- [Contact Details](./ContactDetails) From 7466783ba59ba2a306fded4e131d4318316bd05d Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 17:57:19 +0200 Subject: [PATCH 06/25] Updated sidebar --- _Sidebar.md | 99 +++++++++++++++++++++++++++-------------------------- 1 file changed, 51 insertions(+), 48 deletions(-) diff --git a/_Sidebar.md b/_Sidebar.md index 5c718c4..3c9ed99 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -2,54 +2,57 @@ - [Prerequisites](./Prerequisites) - [Setting up server](./ServerSetup) - [Config](./Config) -- Module Development - - [Module Structure](./ModuleStructure) - - [Module.json](./ModuleJSON) - - [Property](./ModuleJSONProperty) - - [Trigger](./ModuleTrigger) - - [Condition](./ModuleCondition) - - [Complete Example](./module.json) - - [Development environment/Building](./ModuleEnvironment) - - [GetiyoModuleTool](./GetiyoModuleTool) +## Module Development - - [Bug/Feature Reporting](./Reporting) - - [Contact Details](./ContactDetails) - -# he;;p - - - [ModuleClientAPI](./ModuleClientAPIIntroduction) - - [Documentation](./ModuleClientAPI) - - [User](./ModuleClientAPIUser) - - [Neighbor](./ModuleClientAPINeighbor) - - [Neighbor Results](./ModuleClientAPINeighborResults) - - [GameLib](./ModuleClientAPIGameLib) - - [Controller](./ModuleClientAPIGameLibController) - - [Important Principals](./ModuleClientAPIPrincipals) - - [ModuleServerAPI](./ModuleServerAPI) - - - [Client](./ModuleServerAPIClient) - - [Property](./ModuleServerAPIProperty) - - [GameLib](./ModuleServerAPIGameLib) - - [Room](./ModuleServerAPIGameLibRoom) - - [Game](./ModuleServerAPIGameLibGame) - - [GamePlayer](./ModuleServerAPIGameLibGamePlayer) - - [Scoreboard](./ModuleServerAPIGameLibScoreboard) - - [Details](./ModuleServerAPIGameLibScoreboardDetails) - - [State](./ModuleServerAPIGameLibScoreboardState) - - [GameLib CollisionSpace](./ModuleServerAPIGameLibCollisionSpace) - - [Important Principals](./ModuleServerAPIPrincipals) - - [Libs](./ModuleServerAPILibs) - - [LibWebSocket](./ModuleServerAPILibsWebSocketLib) - - [Axios](https://axios-http.com/docs/instance) - - - ModuleApi Shared - - [RuntimeStorage](./ModuleApiGameLibRuntimeStorage) - - Gamelib - - [GameLib GameDetails](./ModuleApiGameLibGameDetails) - - [GameLib EndScreen](./ModuleAPIGameLibEndScreen) - - [GameLib TimeSpan](./ModuleApiGameLibTimeSpan) - - [GameLib FrameCycle](./ModuleApiGameLibFrameCycle) - - [GameLib Ratio](./ModuleAPIGameLibRatio) - - [Module Debugging](./ModuleDebugging) +- [Module Structure](./ModuleStructure) +- [Module.json](./ModuleJSON) + - [Property](./ModuleJSONProperty) + - [Trigger](./ModuleTrigger) + - [Condition](./ModuleCondition) + - [Complete Example](./module.json) +- [Development environment/Building](./ModuleEnvironment) +- [Module Debugging](./ModuleDebugging) +- [GetiyoModuleTool](./GetiyoModuleTool) - [ModuleStore](./ModuleStore) +- [Bug/Feature Reporting](./Reporting) +- [Contact Details](./ContactDetails) + +## ModuleClientAPI + +- [Introduction](./ModuleClientAPIIntroduction) +- [Documentation](./ModuleClientAPI) +- [User](./ModuleClientAPIUser) +- [Neighbor](./ModuleClientAPINeighbor) + - [Neighbor Results](./ModuleClientAPINeighborResults) +- [GameLib](./ModuleClientAPIGameLib) + - [Controller](./ModuleClientAPIGameLibController) +- [Important Principals](./ModuleClientAPIPrincipals) + +## ModuleServerAPI + +- [ModuleServerAPI](./ModuleServerAPI) +- [Client](./ModuleServerAPIClient) +- [Property](./ModuleServerAPIProperty) +- [GameLib](./ModuleServerAPIGameLib) + - [Room](./ModuleServerAPIGameLibRoom) + - [Game](./ModuleServerAPIGameLibGame) + - [GamePlayer](./ModuleServerAPIGameLibGamePlayer) + - [Scoreboard](./ModuleServerAPIGameLibScoreboard) + - [Details](./ModuleServerAPIGameLibScoreboardDetails) + - [State](./ModuleServerAPIGameLibScoreboardState) + - [GameLib CollisionSpace](./ModuleServerAPIGameLibCollisionSpace) +- [Important Principals](./ModuleServerAPIPrincipals) +- [Libs](./ModuleServerAPILibs) + - [LibWebSocket](./ModuleServerAPILibsWebSocketLib) + - [Axios](https://axios-http.com/docs/instance) + +## ModuleApi Shared + +- [RuntimeStorage](./ModuleApiGameLibRuntimeStorage) +- Gamelib + - [GameLib GameDetails](./ModuleApiGameLibGameDetails) + - [GameLib EndScreen](./ModuleAPIGameLibEndScreen) + - [GameLib TimeSpan](./ModuleApiGameLibTimeSpan) + - [GameLib FrameCycle](./ModuleApiGameLibFrameCycle) + - [GameLib Ratio](./ModuleAPIGameLibRatio) From 65913f4f8a4a961cc49ce267490f6e0c26d15587 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 17:57:58 +0200 Subject: [PATCH 07/25] Updated sidebar --- _Sidebar.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_Sidebar.md b/_Sidebar.md index 3c9ed99..012476e 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -1,3 +1,5 @@ +## Getting Started + - [Introduction](./Home) - [Prerequisites](./Prerequisites) - [Setting up server](./ServerSetup) From f48a438133a850ea19f49251c24dc3913b3911d9 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 17:58:22 +0200 Subject: [PATCH 08/25] Updated sidebar --- _Sidebar.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/_Sidebar.md b/_Sidebar.md index 012476e..0185a1d 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -1,11 +1,11 @@ -## Getting Started +### Getting Started - [Introduction](./Home) - [Prerequisites](./Prerequisites) - [Setting up server](./ServerSetup) - [Config](./Config) -## Module Development +### Module Development - [Module Structure](./ModuleStructure) - [Module.json](./ModuleJSON) @@ -20,7 +20,7 @@ - [Bug/Feature Reporting](./Reporting) - [Contact Details](./ContactDetails) -## ModuleClientAPI +### ModuleClientAPI - [Introduction](./ModuleClientAPIIntroduction) - [Documentation](./ModuleClientAPI) @@ -31,7 +31,7 @@ - [Controller](./ModuleClientAPIGameLibController) - [Important Principals](./ModuleClientAPIPrincipals) -## ModuleServerAPI +### ModuleServerAPI - [ModuleServerAPI](./ModuleServerAPI) - [Client](./ModuleServerAPIClient) @@ -49,7 +49,7 @@ - [LibWebSocket](./ModuleServerAPILibsWebSocketLib) - [Axios](https://axios-http.com/docs/instance) -## ModuleApi Shared +### ModuleApi Shared - [RuntimeStorage](./ModuleApiGameLibRuntimeStorage) - Gamelib From 53bdfa46f3979aeed9b5b54dc5563d0895e8e322 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 17:58:43 +0200 Subject: [PATCH 09/25] Updated sidebar --- _Sidebar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_Sidebar.md b/_Sidebar.md index 0185a1d..c0102e4 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -20,7 +20,7 @@ - [Bug/Feature Reporting](./Reporting) - [Contact Details](./ContactDetails) -### ModuleClientAPI +### [ModuleClientAPI](./ModuleClientAPIIntroduction) - [Introduction](./ModuleClientAPIIntroduction) - [Documentation](./ModuleClientAPI) From ea04200007110877ed373cbcd493bd75beb8a929 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:00:02 +0200 Subject: [PATCH 10/25] Added links to categories --- _Sidebar.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/_Sidebar.md b/_Sidebar.md index c0102e4..0a75a31 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -1,11 +1,11 @@ -### Getting Started +### [Getting Started](./Home) - [Introduction](./Home) - [Prerequisites](./Prerequisites) - [Setting up server](./ServerSetup) - [Config](./Config) -### Module Development +### [Module Development](./ModuleStructure) - [Module Structure](./ModuleStructure) - [Module.json](./ModuleJSON) @@ -31,8 +31,9 @@ - [Controller](./ModuleClientAPIGameLibController) - [Important Principals](./ModuleClientAPIPrincipals) -### ModuleServerAPI +### [ModuleServerAPI](./ModuleServerAPIIntroduction) +- [Introduction](./ModuleServerAPIIntroduction) - [ModuleServerAPI](./ModuleServerAPI) - [Client](./ModuleServerAPIClient) - [Property](./ModuleServerAPIProperty) From 141f410523ed344f6a750637fd053606a2921e81 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:00:21 +0200 Subject: [PATCH 11/25] Updated sidebar --- _Sidebar.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/_Sidebar.md b/_Sidebar.md index 0a75a31..c1ad2b7 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -1,11 +1,11 @@ -### [Getting Started](./Home) +## [Getting Started](./Home) - [Introduction](./Home) - [Prerequisites](./Prerequisites) - [Setting up server](./ServerSetup) - [Config](./Config) -### [Module Development](./ModuleStructure) +## [Module Development](./ModuleStructure) - [Module Structure](./ModuleStructure) - [Module.json](./ModuleJSON) @@ -20,7 +20,7 @@ - [Bug/Feature Reporting](./Reporting) - [Contact Details](./ContactDetails) -### [ModuleClientAPI](./ModuleClientAPIIntroduction) +## [ModuleClientAPI](./ModuleClientAPIIntroduction) - [Introduction](./ModuleClientAPIIntroduction) - [Documentation](./ModuleClientAPI) @@ -31,7 +31,7 @@ - [Controller](./ModuleClientAPIGameLibController) - [Important Principals](./ModuleClientAPIPrincipals) -### [ModuleServerAPI](./ModuleServerAPIIntroduction) +## [ModuleServerAPI](./ModuleServerAPIIntroduction) - [Introduction](./ModuleServerAPIIntroduction) - [ModuleServerAPI](./ModuleServerAPI) @@ -50,7 +50,7 @@ - [LibWebSocket](./ModuleServerAPILibsWebSocketLib) - [Axios](https://axios-http.com/docs/instance) -### ModuleApi Shared +## ModuleApi Shared - [RuntimeStorage](./ModuleApiGameLibRuntimeStorage) - Gamelib From 8752d8e7d29c675381a5cba3175318cb718e5c66 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:10:54 +0200 Subject: [PATCH 12/25] Added MSA introductions --- ModuleClientAPI.md | 2 +- ModuleClientAPIIntroduction.md | 2 +- ModuleServerAPIIntroduction.md | 81 ++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 ModuleServerAPIIntroduction.md diff --git a/ModuleClientAPI.md b/ModuleClientAPI.md index a0c7ef5..1541ffa 100644 --- a/ModuleClientAPI.md +++ b/ModuleClientAPI.md @@ -1,4 +1,4 @@ -# ModuleClientAPI - Main +# ModuleClientAPI - Documentation ## Sub Classes diff --git a/ModuleClientAPIIntroduction.md b/ModuleClientAPIIntroduction.md index b4732c0..0668be0 100644 --- a/ModuleClientAPIIntroduction.md +++ b/ModuleClientAPIIntroduction.md @@ -1,4 +1,4 @@ -# ModuleClientAPI - Introductions +# ModuleClientAPI - Introduction The **ModuleClientAPI** is the heart of every interactive Getiyo module's front-end experience. When users visit your channel and see your module in action, they're interacting with code powered by this comprehensive client-side interface. Think of it as your module's direct connection to the Getiyo ecosystem—enabling real-time communication with your server-side logic, responding instantly to property changes from the editor, and creating seamless user experiences that feel native to the platform. diff --git a/ModuleServerAPIIntroduction.md b/ModuleServerAPIIntroduction.md new file mode 100644 index 0000000..c88b87c --- /dev/null +++ b/ModuleServerAPIIntroduction.md @@ -0,0 +1,81 @@ +# ModuleServerAPI - Introduction + +Welcome to the **ModuleServerAPI** — the powerful server-side foundation that brings your Getiyo modules to life. Every module you create relies on this API to handle the complex orchestration between users, data, and the Getiyo platform itself. + +## What is the ModuleServerAPI? + +Think of the ModuleServerAPI as your module's command center. While users interact with your module's visual interface through the [`ModuleClientAPI`](./ModuleClientAPI), the real magic happens server-side. This is where you process data, manage business logic, store sensitive information, and coordinate real-time experiences for multiple users simultaneously. + +The ModuleServerAPI runs in a secure server environment, giving you access to powerful capabilities that would be impossible or unsafe to implement client-side. Whether you're building a simple display widget or a complex interactive experience, this API provides the tools to create responsive, scalable, and secure modules. + +## Core Capabilities + +**Real-time Communication**: Instantly send messages to all connected clients or target specific users with [`api.broadcast()`](./ModuleServerAPI#broadcast) and [`api.getClient()`](./ModuleServerAPI#getclient). Your modules can respond to user interactions in real-time, creating engaging collaborative experiences. + +**Secure Property Management**: Handle module properties defined in [`module.json`](./ModuleJSON) that remain exclusively server-side — perfect for API keys, authentication tokens, sensitive configuration data, and persistent module state. Access and update these properties using [`api.getModuleProperty()`](./ModuleServerAPI#getmoduleproperty) and monitor changes with [`api.onModulePropertyUpdate()`](./ModuleServerAPI#onmodulepropertyupdate). While reference properties exist for scene-specific client-side data, your server-side logic should primarily rely on module properties for secure, persistent data management. + +**Rich File Operations**: Read, write, and host files with full scope control through [`api.readJSON()`](./ModuleServerAPI#readjson), [`api.writeJSON()`](./ModuleServerAPI#writejson), and [`api.addHost()`](./ModuleServerAPI#addhost). Store module-specific data, share files across your channel, or serve static content directly to users. + +**Show Control Integration**: Seamlessly integrate with Getiyo's cue list system using triggers and conditions. Register [`api.onTrigger()`](./ModuleServerAPI#ontrigger) handlers to respond to automated cues, and use [`api.finishServerCondition()`](./ModuleServerAPI#finishservercondition) to control show flow based on your module's state. + +**External Service Integration**: Connect to databases, APIs, and external services using battle-tested libraries like WebSocket, Redis, and Axios through [`api.Libs`](./ModuleServerAPILibs). Build modules that bridge Getiyo with your existing infrastructure. + +## How It Works + +When your module loads, the ModuleServerAPI automatically connects to any [`ModuleClientAPI`](./ModuleClientAPI) instances viewing your module. This creates a persistent, bidirectional communication channel that stays synchronized across scene changes, user interactions, and show control events. + +Your server-side code registers event listeners to respond to messages from clients, module property updates from the admin interface, scene transitions, and triggers from cue lists. Meanwhile, you can push updates, broadcast changes, and maintain state that persists across user sessions. + +Here's a simple example that demonstrates the API's event-driven nature: + +```javascript +// Respond to messages from any connected client +api.on('userAction', (client, actionData) => { + console.log(`User ${client.getClientID()} performed action:`, actionData); + + // Process the action server-side + const result = processUserAction(actionData); + + // Send response back to the specific user + client.send('actionResult', result); + + // Broadcast the update to all other users + const otherClients = Object.values(api.getClients()).filter( + (c) => c.getClientID() !== client.getClientID() + ); + + otherClients.forEach((c) => { + c.send('userUpdate', { + user: client.getClientID(), + action: actionData, + }); + }); +}); + +// Handle module property changes from the admin interface +api.onModulePropertyUpdate('apiKey', (newKey) => { + console.log('API key updated, reconnecting to external service...'); + + // Update external service connection with new credentials + reconnectExternalService(newKey); + + // Notify all clients that service is reconnecting + api.broadcast('serviceStatus', 'reconnecting'); +}); + +// Respond to cue list triggers +api.onTrigger('startSequence', (finish, status, ...args) => { + status('Starting sequence...'); + + // Use module properties for configuration + const sequenceConfig = api.getModuleProperty('sequenceSettings').getValue(); + + // Perform the triggered action + performSequence(args, sequenceConfig).then(() => { + // Signal completion to continue the cue list + finish(); + }); +}); +``` + +This introduction establishes the ModuleServerAPI's role and capabilities in a more narrative, welcoming tone while still providing concrete examples and clear From 75d017a36074a7e6ecefcf17d736594c5abae3c1 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:11:26 +0200 Subject: [PATCH 13/25] Reordered sidebar --- _Sidebar.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/_Sidebar.md b/_Sidebar.md index c1ad2b7..23eab0e 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -20,17 +20,6 @@ - [Bug/Feature Reporting](./Reporting) - [Contact Details](./ContactDetails) -## [ModuleClientAPI](./ModuleClientAPIIntroduction) - -- [Introduction](./ModuleClientAPIIntroduction) -- [Documentation](./ModuleClientAPI) -- [User](./ModuleClientAPIUser) -- [Neighbor](./ModuleClientAPINeighbor) - - [Neighbor Results](./ModuleClientAPINeighborResults) -- [GameLib](./ModuleClientAPIGameLib) - - [Controller](./ModuleClientAPIGameLibController) -- [Important Principals](./ModuleClientAPIPrincipals) - ## [ModuleServerAPI](./ModuleServerAPIIntroduction) - [Introduction](./ModuleServerAPIIntroduction) @@ -50,6 +39,17 @@ - [LibWebSocket](./ModuleServerAPILibsWebSocketLib) - [Axios](https://axios-http.com/docs/instance) +## [ModuleClientAPI](./ModuleClientAPIIntroduction) + +- [Introduction](./ModuleClientAPIIntroduction) +- [Documentation](./ModuleClientAPI) +- [User](./ModuleClientAPIUser) +- [Neighbor](./ModuleClientAPINeighbor) + - [Neighbor Results](./ModuleClientAPINeighborResults) +- [GameLib](./ModuleClientAPIGameLib) + - [Controller](./ModuleClientAPIGameLibController) +- [Important Principals](./ModuleClientAPIPrincipals) + ## ModuleApi Shared - [RuntimeStorage](./ModuleApiGameLibRuntimeStorage) From 4e7ec6b089bf4a954b66ad6727eca7a2ad392dfc Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:29:45 +0200 Subject: [PATCH 14/25] Updated sidebar --- ModuleServerAPIGameLibIntroduction.md | 116 ++++++++++++++++++++++++++ _Sidebar.md | 7 +- 2 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 ModuleServerAPIGameLibIntroduction.md diff --git a/ModuleServerAPIGameLibIntroduction.md b/ModuleServerAPIGameLibIntroduction.md new file mode 100644 index 0000000..f2e6140 --- /dev/null +++ b/ModuleServerAPIGameLibIntroduction.md @@ -0,0 +1,116 @@ +# ModuleClientApi - GameLib Introduction + +The **GameLib** is Getiyo's powerful game development framework designed to create engaging, synchronized multiplayer experiences that work seamlessly across all connected devices. At its core, the GameLib follows a **server-authoritative architecture** that ensures every player sees exactly the same game state, regardless of their device or connection quality. + +## Why Server-Authoritative Architecture Matters + +Traditional client-side games can quickly become chaotic in multiplayer scenarios—players see different positions, scores vary between devices, and cheating becomes virtually impossible to prevent. GameLib solves these problems by centralizing all critical game logic on the server side. + +**The golden rule: All game logic must run on the server.** This fundamental principle ensures: + +- **Perfect Synchronization**: Every connected device displays identical game states in real-time +- **Cheat Prevention**: Players cannot manipulate game outcomes since all calculations happen server-side +- **Consistent Performance**: Game timing and physics remain stable regardless of individual device capabilities +- **Reliable Multiplayer**: Eliminates state conflicts as the server maintains the single source of truth + +## Clear Separation of Responsibilities + +GameLib enforces a clean division between server and client responsibilities: + +**Server-Side (ModuleServerAPI) handles:** + +- Game loop timing and progression +- Collision detection and physics calculations +- Player input validation and processing +- Score tracking and leaderboard management +- Win/loss condition evaluation +- All business logic and rule enforcement + +**Client-Side (ModuleClientAPI) focuses on:** + +- Visual representation and rendering +- User interface elements and feedback +- Smooth animations and visual effects +- Displaying server-provided game state + +Think of clients as "smart displays" that beautifully present the server's authoritative game state. + +## Built-in Game Infrastructure + +GameLib provides three essential infrastructure components that work seamlessly together through standardized APIs, giving you complete flexibility in how you implement your multiplayer experience. + +### **Modular Architecture** + +The beauty of GameLib lies in its modular approach. When you create a GameLib project, you're not limited to building traditional games. You can create: + +- **Game modules** that handle core gameplay mechanics +- **Controller modules** for custom input interfaces +- **Queue modules** for player management systems +- **Scoreboard modules** for displaying results and rankings + +All communication between these modules is handled automatically through the GameLib API, making it effortless to mix and match components. + +### **Ready-to-Use Default Modules** + +GameLib includes polished, production-ready modules that work out of the box: + +**Default Controller Module** + +- Standardized game controls (directional movement, action buttons) +- Cross-platform compatibility (mobile, tablet, desktop) +- Support for both binary (on/off) and analog (intensity-based) controls +- Professional styling that matches Getiyo's design language + +**Default Queue Module** + +- Real-time queue visualization for all participants +- Professional styling that matches Getiyo's design language + +**Default Scoreboard Module** + +- Multiple simultaneous scoreboards support +- Flexible formatting options (numbers, duration, custom displays) +- Automatic sorting and ranking systems +- Real-time score updates across all devices + +### **Custom Module Development** + +When the default modules don't fit your vision, you have complete freedom to build custom alternatives: + +**Custom Controllers**: Create unique input experiences—from drawing interfaces to voice controls to gesture-based interactions. Your custom controller automatically communicates with games through the standard GameLib API. + +**Custom Queues**: Build specialized waiting experiences. + +**Custom Scoreboards**: Design unique visualization systems for your specific game type—from simple leaderboards to complex statistical displays or interactive result presentations. + +### **Seamless Integration** + +The real power emerges when these modules work together. A racing game can use: + +- The default controller for steering inputs +- A custom queue module that shows car selection during waiting +- A custom scoreboard displaying lap times and race positions + +All modules communicate through GameLib's standardized API, so your custom controller will work with any GameLib game, and your game will work with any GameLib controller. This creates a rich ecosystem where components can be shared and reused across different projects. + +### **Plug-and-Play Simplicity** + +Whether you use the defaults or build custom modules, GameLib handles all the complex communication, state synchronization, and player management behind the scenes. You simply focus on creating engaging experiences while GameLib ensures everything works together flawlessly. + +## Development Advantages + +By leveraging GameLib's architecture and pre-built components, you gain: + +**Rapid Development**: Skip months of infrastructure work and focus on what makes your game unique. No more building input systems, queue management, or scoreboard functionality from scratch. + +**Proven Reliability**: Every component has been battle-tested across numerous Getiyo productions, ensuring stability and performance under real-world conditions. + +**Consistent User Experience**: Players immediately understand how to interact with your game because they recognize the familiar, polished interface elements. + +**Scalable Architecture**: As your game grows in complexity or player count, the server-authoritative design naturally scales without requiring architectural changes. + +## Getting Started + +Creating a multiplayer game with GameLib is straightforward. The server handles all game logic while clients provide beautiful, responsive interfaces. With built-in controllers, queues, and scoreboards, you can focus entirely on crafting engaging gameplay mechanics rather than wrestling with technical infrastructure. + +Whether you're building a fast-paced action game, a strategic puzzle challenge, or an interactive quiz experience, GameLib provides the foundation you need to create memorable multiplayer moments that work flawlessly across every device in your audience. diff --git a/_Sidebar.md b/_Sidebar.md index 23eab0e..ce10101 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -23,10 +23,11 @@ ## [ModuleServerAPI](./ModuleServerAPIIntroduction) - [Introduction](./ModuleServerAPIIntroduction) -- [ModuleServerAPI](./ModuleServerAPI) +- [ModuleServerAPI Specification](./ModuleServerAPI) - [Client](./ModuleServerAPIClient) - [Property](./ModuleServerAPIProperty) -- [GameLib](./ModuleServerAPIGameLib) +- [GameLib Introduction](./ModuleServerAPIGameLibIntroduction.md) + - [GameLib Specification](./ModuleServerAPIGameLib) - [Room](./ModuleServerAPIGameLibRoom) - [Game](./ModuleServerAPIGameLibGame) - [GamePlayer](./ModuleServerAPIGameLibGamePlayer) @@ -42,7 +43,7 @@ ## [ModuleClientAPI](./ModuleClientAPIIntroduction) - [Introduction](./ModuleClientAPIIntroduction) -- [Documentation](./ModuleClientAPI) +- [ModuleClientAPI Specification](./ModuleClientAPI) - [User](./ModuleClientAPIUser) - [Neighbor](./ModuleClientAPINeighbor) - [Neighbor Results](./ModuleClientAPINeighborResults) From 495b8834495ee62df2a3a9d9800a05be147d6a8f Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:30:26 +0200 Subject: [PATCH 15/25] Updated sidebar --- _Sidebar.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_Sidebar.md b/_Sidebar.md index ce10101..302adc7 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -23,11 +23,11 @@ ## [ModuleServerAPI](./ModuleServerAPIIntroduction) - [Introduction](./ModuleServerAPIIntroduction) -- [ModuleServerAPI Specification](./ModuleServerAPI) +- [Documentation](./ModuleServerAPI) - [Client](./ModuleServerAPIClient) - [Property](./ModuleServerAPIProperty) -- [GameLib Introduction](./ModuleServerAPIGameLibIntroduction.md) - - [GameLib Specification](./ModuleServerAPIGameLib) +- [GameLib](./ModuleServerAPIGameLibIntroduction.md) + - [Documentation](./ModuleServerAPIGameLib) - [Room](./ModuleServerAPIGameLibRoom) - [Game](./ModuleServerAPIGameLibGame) - [GamePlayer](./ModuleServerAPIGameLibGamePlayer) @@ -43,7 +43,7 @@ ## [ModuleClientAPI](./ModuleClientAPIIntroduction) - [Introduction](./ModuleClientAPIIntroduction) -- [ModuleClientAPI Specification](./ModuleClientAPI) +- [Documentation](./ModuleClientAPI) - [User](./ModuleClientAPIUser) - [Neighbor](./ModuleClientAPINeighbor) - [Neighbor Results](./ModuleClientAPINeighborResults) From 5ea877b0ecf6658d8f36064172ac02066628bd9c Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:31:43 +0200 Subject: [PATCH 16/25] Updated sidebar --- _Sidebar.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/_Sidebar.md b/_Sidebar.md index 302adc7..6f1393c 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -26,20 +26,23 @@ - [Documentation](./ModuleServerAPI) - [Client](./ModuleServerAPIClient) - [Property](./ModuleServerAPIProperty) -- [GameLib](./ModuleServerAPIGameLibIntroduction.md) - - [Documentation](./ModuleServerAPIGameLib) - - [Room](./ModuleServerAPIGameLibRoom) - - [Game](./ModuleServerAPIGameLibGame) - - [GamePlayer](./ModuleServerAPIGameLibGamePlayer) - - [Scoreboard](./ModuleServerAPIGameLibScoreboard) - - [Details](./ModuleServerAPIGameLibScoreboardDetails) - - [State](./ModuleServerAPIGameLibScoreboardState) - - [GameLib CollisionSpace](./ModuleServerAPIGameLibCollisionSpace) - [Important Principals](./ModuleServerAPIPrincipals) - [Libs](./ModuleServerAPILibs) - [LibWebSocket](./ModuleServerAPILibsWebSocketLib) - [Axios](https://axios-http.com/docs/instance) +## [ModuleServerAPI GameLib](./ModuleServerAPIGameLibIntroduction) + +- [Introduction](./ModuleServerAPIGameLibIntroduction.md) +- [Documentation](./ModuleServerAPIGameLib) +- [Room](./ModuleServerAPIGameLibRoom) +- [Game](./ModuleServerAPIGameLibGame) + - [GamePlayer](./ModuleServerAPIGameLibGamePlayer) + - [Scoreboard](./ModuleServerAPIGameLibScoreboard) + - [Details](./ModuleServerAPIGameLibScoreboardDetails) + - [State](./ModuleServerAPIGameLibScoreboardState) +- [GameLib CollisionSpace](./ModuleServerAPIGameLibCollisionSpace) + ## [ModuleClientAPI](./ModuleClientAPIIntroduction) - [Introduction](./ModuleClientAPIIntroduction) From 305fac2601ce8df3bac6440b8f27fd1b22e3d3b6 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:32:25 +0200 Subject: [PATCH 17/25] Updated sidebar --- _Sidebar.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/_Sidebar.md b/_Sidebar.md index 6f1393c..020c0c4 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -23,36 +23,36 @@ ## [ModuleServerAPI](./ModuleServerAPIIntroduction) - [Introduction](./ModuleServerAPIIntroduction) -- [Documentation](./ModuleServerAPI) -- [Client](./ModuleServerAPIClient) -- [Property](./ModuleServerAPIProperty) -- [Important Principals](./ModuleServerAPIPrincipals) -- [Libs](./ModuleServerAPILibs) - - [LibWebSocket](./ModuleServerAPILibsWebSocketLib) - - [Axios](https://axios-http.com/docs/instance) +- [ModuleServerAPI](./ModuleServerAPI) + - [Client](./ModuleServerAPIClient) + - [Property](./ModuleServerAPIProperty) + - [Important Principals](./ModuleServerAPIPrincipals) + - [Libs](./ModuleServerAPILibs) + - [LibWebSocket](./ModuleServerAPILibsWebSocketLib) + - [Axios](https://axios-http.com/docs/instance) ## [ModuleServerAPI GameLib](./ModuleServerAPIGameLibIntroduction) - [Introduction](./ModuleServerAPIGameLibIntroduction.md) -- [Documentation](./ModuleServerAPIGameLib) -- [Room](./ModuleServerAPIGameLibRoom) -- [Game](./ModuleServerAPIGameLibGame) - - [GamePlayer](./ModuleServerAPIGameLibGamePlayer) - - [Scoreboard](./ModuleServerAPIGameLibScoreboard) - - [Details](./ModuleServerAPIGameLibScoreboardDetails) - - [State](./ModuleServerAPIGameLibScoreboardState) -- [GameLib CollisionSpace](./ModuleServerAPIGameLibCollisionSpace) +- [GameLib](./ModuleServerAPIGameLib) + - [Room](./ModuleServerAPIGameLibRoom) + - [Game](./ModuleServerAPIGameLibGame) + - [GamePlayer](./ModuleServerAPIGameLibGamePlayer) + - [Scoreboard](./ModuleServerAPIGameLibScoreboard) + - [Details](./ModuleServerAPIGameLibScoreboardDetails) + - [State](./ModuleServerAPIGameLibScoreboardState) + - [GameLib CollisionSpace](./ModuleServerAPIGameLibCollisionSpace) ## [ModuleClientAPI](./ModuleClientAPIIntroduction) - [Introduction](./ModuleClientAPIIntroduction) -- [Documentation](./ModuleClientAPI) -- [User](./ModuleClientAPIUser) -- [Neighbor](./ModuleClientAPINeighbor) - - [Neighbor Results](./ModuleClientAPINeighborResults) -- [GameLib](./ModuleClientAPIGameLib) - - [Controller](./ModuleClientAPIGameLibController) -- [Important Principals](./ModuleClientAPIPrincipals) +- [ModuleClientAPI](./ModuleClientAPI) + - [User](./ModuleClientAPIUser) + - [Neighbor](./ModuleClientAPINeighbor) + - [Neighbor Results](./ModuleClientAPINeighborResults) + - [GameLib](./ModuleClientAPIGameLib) + - [Controller](./ModuleClientAPIGameLibController) + - [Important Principals](./ModuleClientAPIPrincipals) ## ModuleApi Shared From 38b44a8ba67f22dd8f06ead05a2e06f1accbcf83 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:33:07 +0200 Subject: [PATCH 18/25] Updated sidebar --- _Sidebar.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/_Sidebar.md b/_Sidebar.md index 020c0c4..17f4b60 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -1,11 +1,11 @@ -## [Getting Started](./Home) +### [Getting Started](./Home) - [Introduction](./Home) - [Prerequisites](./Prerequisites) - [Setting up server](./ServerSetup) - [Config](./Config) -## [Module Development](./ModuleStructure) +### [Module Development](./ModuleStructure) - [Module Structure](./ModuleStructure) - [Module.json](./ModuleJSON) @@ -20,7 +20,7 @@ - [Bug/Feature Reporting](./Reporting) - [Contact Details](./ContactDetails) -## [ModuleServerAPI](./ModuleServerAPIIntroduction) +### [ModuleServerAPI](./ModuleServerAPIIntroduction) - [Introduction](./ModuleServerAPIIntroduction) - [ModuleServerAPI](./ModuleServerAPI) @@ -31,7 +31,7 @@ - [LibWebSocket](./ModuleServerAPILibsWebSocketLib) - [Axios](https://axios-http.com/docs/instance) -## [ModuleServerAPI GameLib](./ModuleServerAPIGameLibIntroduction) +### [ModuleServerAPI GameLib](./ModuleServerAPIGameLibIntroduction) - [Introduction](./ModuleServerAPIGameLibIntroduction.md) - [GameLib](./ModuleServerAPIGameLib) @@ -43,7 +43,7 @@ - [State](./ModuleServerAPIGameLibScoreboardState) - [GameLib CollisionSpace](./ModuleServerAPIGameLibCollisionSpace) -## [ModuleClientAPI](./ModuleClientAPIIntroduction) +### [ModuleClientAPI](./ModuleClientAPIIntroduction) - [Introduction](./ModuleClientAPIIntroduction) - [ModuleClientAPI](./ModuleClientAPI) @@ -54,7 +54,7 @@ - [Controller](./ModuleClientAPIGameLibController) - [Important Principals](./ModuleClientAPIPrincipals) -## ModuleApi Shared +### ModuleApi Shared - [RuntimeStorage](./ModuleApiGameLibRuntimeStorage) - Gamelib From 9ce4b72be0b829e678c3da62ca90d6fb6af7696f Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:36:06 +0200 Subject: [PATCH 19/25] Removed .md --- _Sidebar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_Sidebar.md b/_Sidebar.md index 17f4b60..4c4aba0 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -33,7 +33,7 @@ ### [ModuleServerAPI GameLib](./ModuleServerAPIGameLibIntroduction) -- [Introduction](./ModuleServerAPIGameLibIntroduction.md) +- [Introduction](./ModuleServerAPIGameLibIntroduction) - [GameLib](./ModuleServerAPIGameLib) - [Room](./ModuleServerAPIGameLibRoom) - [Game](./ModuleServerAPIGameLibGame) From 9fdbbc62a7e9fe91999fff605642427e72ab1047 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:40:23 +0200 Subject: [PATCH 20/25] Updated home --- Home.md | 57 +++++---------------------------------------------------- 1 file changed, 5 insertions(+), 52 deletions(-) diff --git a/Home.md b/Home.md index fd0784b..5414b7d 100644 --- a/Home.md +++ b/Home.md @@ -22,56 +22,9 @@ Modules in Getiyo are structured with a clear separation of concerns: Most modules will rely solely on these two layers—server-side logic with secure module properties, and a user-facing interface enriched by live-updatable reference properties. Control or external pages are available for advanced use cases (custom moderation UIs or standalone module views) but are optional and should be added only when necessary. -## Outline +## Getting Started -- [Introduction](./Home) -- [Prerequisites](./Prerequisites) -- [Setting up server](./ServerSetup) -- [Config](./Config) -- Module Development - - - [Module Structure](./ModuleStructure) - - [Module.json](./ModuleJSON) - - [Property](./ModuleJSONProperty) - - [Trigger](./ModuleTrigger) - - [Condition](./ModuleCondition) - - [Complete Example](./module.json) - - [Development environment/Building](./ModuleEnvironment) - - [GetiyoModuleTool](./GetiyoModuleTool) - - [ModuleClientAPI](./ModuleClientAPI) - - [Important Principals](./ModuleClientAPIPrincipals) - - [User](./ModuleClientAPIUser) - - [Neighbor](./ModuleClientAPINeighbor) - - [Neighbor Results](./ModuleClientAPINeighborResults) - - [GameLib](./ModuleClientAPIGameLib) - - [Controller](./ModuleClientAPIGameLibController) - - [ModuleServerAPI](./ModuleServerAPI) - - - [Important Principals](./ModuleServerAPIPrincipals) - - [Client](./ModuleServerAPIClient) - - [Property](./ModuleServerAPIProperty) - - [GameLib](./ModuleServerAPIGameLib) - - [Room](./ModuleServerAPIGameLibRoom) - - [Game](./ModuleServerAPIGameLibGame) - - [GamePlayer](./ModuleServerAPIGameLibGamePlayer) - - [Scoreboard](./ModuleServerAPIGameLibScoreboard) - - [Details](./ModuleServerAPIGameLibScoreboardDetails) - - [State](./ModuleServerAPIGameLibScoreboardState) - - [GameLib CollisionSpace](./ModuleServerAPIGameLibCollisionSpace) - - [Libs](./ModuleServerAPILibs) - - [LibWebSocket](./ModuleServerAPILibsWebSocketLib) - - [Axios](https://axios-http.com/docs/instance) - - - ModuleApi Shared - - [RuntimeStorage](./ModuleApiGameLibRuntimeStorage) - - Gamelib - - [GameLib GameDetails](./ModuleApiGameLibGameDetails) - - [GameLib EndScreen](./ModuleAPIGameLibEndScreen) - - [GameLib TimeSpan](./ModuleApiGameLibTimeSpan) - - [GameLib FrameCycle](./ModuleApiGameLibFrameCycle) - - [GameLib Ratio](./ModuleAPIGameLibRatio) - - [Module Debugging](./ModuleDebugging) - - [ModuleStore](./ModuleStore) - -- [Bug/Feature Reporting](./Reporting) -- [Contact Details](./ContactDetails) +| Development | ModuleServerAPI | ModuleClientAPI | +| ------------------------------------- | ------------------------------------------------ | ------------------------------------------------ | +| [Module Structure](./ModuleStructure) | [Introduction](./ModuleServerAPIIntroduction.md) | [Introduction](./ModuleClientAPIIntroduction.md) | +| | [Documentation](./ModuleServerAPI.md) | [Documentation](./ModuleClientAPI.md) | From 3a99383a54a72c08bb5f1dd3d6edbb309751f56c Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:43:48 +0200 Subject: [PATCH 21/25] Updated home --- Home.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Home.md b/Home.md index 5414b7d..43027e5 100644 --- a/Home.md +++ b/Home.md @@ -24,7 +24,7 @@ Most modules will rely solely on these two layers—server-side logic with secur ## Getting Started -| Development | ModuleServerAPI | ModuleClientAPI | -| ------------------------------------- | ------------------------------------------------ | ------------------------------------------------ | -| [Module Structure](./ModuleStructure) | [Introduction](./ModuleServerAPIIntroduction.md) | [Introduction](./ModuleClientAPIIntroduction.md) | -| | [Documentation](./ModuleServerAPI.md) | [Documentation](./ModuleClientAPI.md) | +| **Development Environment** | **ModuleServerAPI** | **ModuleClientAPI** | +| -------------------------------------- | --------------------------------------------- | --------------------------------------------- | +| [Module Structure](./ModuleStructure) | [Introduction](./ModuleServerAPIIntroduction) | [Introduction](./ModuleClientAPIIntroduction) | +| [GetiyoModuleTool](./GetiyoModuleTool) | [Documentation](./ModuleServerAPI) | [Documentation](./ModuleClientAPI) | From e74a0d2cc2a59ab41f27acd94749a5fbc0caf1f2 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:49:56 +0200 Subject: [PATCH 22/25] Added docs --- ModuleClientAPIGameLib.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ModuleClientAPIGameLib.md b/ModuleClientAPIGameLib.md index 83e6206..4acb6aa 100644 --- a/ModuleClientAPIGameLib.md +++ b/ModuleClientAPIGameLib.md @@ -1,6 +1,6 @@ # ModuleClientApi - GameLib -Class representing the GameLib inside the ModuleClientAPI. +The GameLib is Getiyo's game development framework that enables synchronized multiplayer experiences across all connected devices. The client-side GameLib focuses on timing calculation functions and custom controller development, while all core game logic, collision detection, state management, and business rules are handled server-side through the [ModuleServerAPI GameLib](./ModuleServerAPIGameLibIntroduction). If you want to make a game, you need to look at the [ModuleServerAPI GameLib](./ModuleServerAPIGameLibIntroduction) where all the core functionality resides. ## Controller From d04cb541ec6bfd830925f24bd64a7415efecfb44 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:51:25 +0200 Subject: [PATCH 23/25] Added gamelib introduction --- ModuleServerAPIGameLib.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ModuleServerAPIGameLib.md b/ModuleServerAPIGameLib.md index 9a4fc67..b598a13 100644 --- a/ModuleServerAPIGameLib.md +++ b/ModuleServerAPIGameLib.md @@ -1,6 +1,6 @@ # ModuleClientApi - GameLib -Class representing the GameLib inside the ModuleServerAPI. +The GameLib is Getiyo's game development framework that enables synchronized multiplayer experiences across all connected devices. [Click here to view the introductions.](./ModuleServerAPIGameLibIntroduction) ## Rooms From 9129d8b064935ad0f625a36af47639d0cd05319d Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:52:26 +0200 Subject: [PATCH 24/25] Updated MCA --- ModuleClientAPI.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ModuleClientAPI.md b/ModuleClientAPI.md index 1541ffa..edbabda 100644 --- a/ModuleClientAPI.md +++ b/ModuleClientAPI.md @@ -1,5 +1,7 @@ # ModuleClientAPI - Documentation +The ModuleClientAPI is the heart of every interactive Getiyo module's front-end experience. [Click here to view the introductions.](./ModuleClientAPIIntroduction) + ## Sub Classes ### GameLib From e9f1d05f4fa7ba9ac3dd632b7793e6e6fb2e0744 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Thu, 14 Aug 2025 18:54:07 +0200 Subject: [PATCH 25/25] Updated documentation --- ModuleServerAPI.md | 57 +--------------------------------- ModuleServerAPIIntroduction.md | 2 +- 2 files changed, 2 insertions(+), 57 deletions(-) diff --git a/ModuleServerAPI.md b/ModuleServerAPI.md index 1de3165..01c477f 100644 --- a/ModuleServerAPI.md +++ b/ModuleServerAPI.md @@ -1,61 +1,6 @@ # ModuleServerAPI -Class representing the ModuleServerAPI. - - +The ModuleServerAPI is the powerful server-side foundation that brings your Getiyo modules to life. Every module you create relies on this API to handle the complex orchestration between users, data, and the Getiyo platform itself. [Click here to view the introductions.](./ModuleServerAPIIntroduction) ## Sub Classes diff --git a/ModuleServerAPIIntroduction.md b/ModuleServerAPIIntroduction.md index c88b87c..316b8d1 100644 --- a/ModuleServerAPIIntroduction.md +++ b/ModuleServerAPIIntroduction.md @@ -1,6 +1,6 @@ # ModuleServerAPI - Introduction -Welcome to the **ModuleServerAPI** — the powerful server-side foundation that brings your Getiyo modules to life. Every module you create relies on this API to handle the complex orchestration between users, data, and the Getiyo platform itself. +The ModuleServerAPI is the powerful server-side foundation that brings your Getiyo modules to life. Every module you create relies on this API to handle the complex orchestration between users, data, and the Getiyo platform itself. ## What is the ModuleServerAPI?