This is still a work in progress but I’ll try to outline how I envision being productive in our current setup.

Avo

We must keep Avo as easy to work with for us and for all newcomers. Remember that this is public and all the other repos (dashboards, filters, etc.) are private and some might not have access to them.

The dummy app should be functional as a runnable app (rails server) and to be used with rspec to run our tests.

When we want to try out new features and provide support requests to our community users, we can start up Avo dummy using bin/dev and work there. After we make the feature we should add tests in this repository.

Commercial packages

When we need to provide support or build new commercial features, we can spin up prommy with bin/dev to do so. Prommy is using the commercial packages in it’s Gemfile so we can work straight in the packages themselves.

After we finish a feature, we add the configuration files (resources, actions, etc.) to each repo’s (dashboards, filters, etc.) dummy app and write some specs there.

We’ll end up with some duplicated configuration files but it’s going to help in the long run.

TailwindCSS

In order to do development properly we need to have all the assets from all the gems available and compiled.

When doing development we run a task rake avo:gem_pats to find the root paths for all packages and memoize them in a AVO_ENGINES environment variable.

AVO_ENGINES # avo:/Users/adrian/work/avocado/avo-3,avo_filters:/Users/adrian/work/avocado/advanced/avo_filters

Next, tailwind.config.js uses those paths to hydrate them with the exact views paths for each gem.

# The hydrated paths for each gem
'/Users/adrian/work/avocado/gems/avo/app/helpers/**/*.rb',
'/Users/adrian/work/avocado/gems/avo/app/views/**/*.erb',
'/Users/adrian/work/avocado/gems/avo/app/javascript/**/*.js',
'/Users/adrian/work/avocado/gems/avo/app/components/**/*.{html.erb,rb}',
'/Users/adrian/work/avocado/gems/avo/app/controllers/**/*.rb',
'/Users/adrian/work/avocado/gems/avo/app/javascript/**/*.js',
'/Users/adrian/work/avocado/gems/avo/lib/avo/**/*.rb',
'/Users/adrian/work/avocado/gems/avo/public/**/*.{js,css}',
'/Users/adrian/work/avocado/gems/avo_filters/app/helpers/**/*.rb',
'/Users/adrian/work/avocado/gems/avo_filters/app/views/**/*.erb',
'/Users/adrian/work/avocado/gems/avo_filters/app/javascript/**/*.js',
'/Users/adrian/work/avocado/gems/avo_filters/app/components/**/*.{html.erb,rb}',
'/Users/adrian/work/avocado/gems/avo_filters/app/controllers/**/*.rb',
'/Users/adrian/work/avocado/gems/avo_filters/app/javascript/**/*.js',
'/Users/adrian/work/avocado/gems/avo_filters/lib/avo_filters/**/*.rb',
'/Users/adrian/work/avocado/gems/avo_filters/public/**/*.{js,css}',

Now we’ve got all the paths for all the gems so we whitelist all the css classes with one process.

Get gem paths

Avo now exports the avo:gem_paths rake task so any app that requires Avo will be able to run it.

This way we don’t need to duplicate this script and we don’t depend on the support package. This is important because the free gem (Avo) will have to work without support.