Skip to content

Make macros more flexible and dynamically instantiated #51

@mickmister

Description

@mickmister

At the moment, there’s not really an abstraction available to allow the user to make their own dashboard or combination of macros to make their own workflow. Every call to ‘create macro’ is more or less at “compile time”. Not literally, more like initialization time. This initialization runs on the server and clients since it’s running isomorphically in the springboard feature modules. Each feature module are currently POCs of feature implementations, but there are shortcomings due to the hardcoded nature. The features currently don’t scale for user customization.

The task here is to design a more data-driven way for macros to be handled. When the config for macros change, all macros in the app should rehydrate based on the data changes. I think they are generally stateless besides editing form state, so I think the hydration is feasible.

We should support the user arbitrarily wanting to assign midi controls to inputs and outputs. For example, the user may want to assign a given midi input, lock in the midi number range to 50-100 (meaning 0=50 and 127=100), and then select a midi output for the control change output as well. So this workflow block would be a tuple of midi_control_change_input and midi_control_change_output macros. The user should arbitrarily be able to add more of these and configure them.

Check out the packages at ‘packages/jamtools/core’ and ‘packages/jamtools/features’ for source and examples. Specifically, check out the inputs accepted by each individual macro type in https://github.com/jamtools/jamtools/tree/main/packages/jamtools/core/modules/macro_module/macro_handlers

@claude You are an expert on typescript best practices and scalable frameworks. Please make a comprehensive plan of exactly how this can be implemented.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions