AI prompts
base on Free and open source Ruby on Rails starter kit built using Tabler <div align="center">
<br>
<h1>Rails Tabler Starter</h1>
<strong>Rails starter boilerplate that you can use to build and prototype quickly. Get from idea to implementation in hours.</strong>
<br>
<br>
![](./app/assets/images/saas-example.gif)
</div>
[Click here](https://rails-tabler.fly.dev) to view demo application. Check out the [Demo setup page](https://rails-tabler.fly.dev/setup/edit) to toggle application settings.
## Goals
This starter is aimed at Rails developers familiar with the framework, aiming to facilitate seamless development with the following principles:
* No DSL: Avoid unnecessary Domain Specific Language (DSL) complexity.
* Simplicity over Efficiency: Prioritize simplicity in implementation over excessive optimization.
* Avoid Complex Frontend Functionality: Keep frontend functionality straightforward and manageable.
## Overview
* Pre-equipped with essential models such as
* Users
* Roles
* Plans
* Subscriptions
<div align="center">
<strong>ERD</strong>
![](./app/assets/images/template-erb.png)
</div>
* User authentication & authorization
* Authentication via [Devise](https://github.com/heartcombo/devise)
* [OmniAuth](https://github.com/heartcombo/devise/wiki/OmniAuth%3A-Overview) integration to extend authentication using third-party providers
* Authorization through [Pundit](https://github.com/varvet/pundit)
* Background worker & scheduler
* Utilizes [sidekiq](https://github.com/mperham/sidekiq/) and [sidekiq-scheduler](https://github.com/sidekiq-scheduler/sidekiq-scheduler)
* Role management
* Standard roles available across spaces
* Custom role creation per space
* Supports fine grained permissions per role
* Multiple user namespaces support
* Utilizes the `Space` model to represent user namespaces (e.g., teams, organizations).
* Example use case for turning on multi-space mode is a saas application
* Example use case for turning off multi-space mode is an internal org tool
* Pre built UI layouts
* High quality UI elements and layouts from [Tabler](https://tabler.io/)
* Development focussed
* [Annotate](https://github.com/ctran/annotate_models) - Annotate Rails classes with schema and routes info
* [Brakeman](https://github.com/presidentbeef/brakeman) - A static analysis security vulnerability scanner
* [Byebug](https://github.com/deivid-rodriguez/byebug) - Simple debugger
* [Dotenv](https://github.com/bkeepers/dotenv) - Load environment variables from `.env`
## Setup
To set up the project, ensure you have PostgreSQL and Redis installed locally. Use the following commands to install them:
```
brew install postgresql@12 redis
```
Clone the repo
```
git clone https://github.com/tarunvelli/rails-tabler-starter.git
```
Install the required dependencies using asdf or setup the dependencies `.tool-versions` in other preferred method:
```
asdf install
```
Set up and run the development server:
```
bin/setup
bin/dev
```
To grant administrative privileges to a user and access admin features, run the following in the Rails console:
```
bundle exec rails c
> User.first.update(admin: true)
```
## AppSettings
Toggle app settings at `/setup/edit`
* `AppSettings.interface_layout`
* Layout of app
* values ["VERTICAL", "VERTICAL-TRANSPARENT", "HORIZONTAL", "OVERLAP", "CONDENSED"]
* `AppSettings.interface_mode`
* Light/Dark mode of app
* "SYSTEM" picks the mode from system preferences
* Values ["LIGHT", "DARK", "SYSTEM"]
* `AppSettings.interface_theme`
* Color theme of app
* Values ["DEFAULT", "COOL"]
* `AppSettings.login_layout` one of
* Layout of login screens
* Values ["DEFAULT", "ILLUSTRATION", "COVER"]
* `AppSettings.multi_tenant_mode`
* When true allows users to sign up and create spaces
* When false allows only admin to invite users and create spaces
* Values [true, false]
* `AppSettings.show_landing_page`
* When true root path renders landing page
* When false root path redirects to sign in page
* Values [true, false]
## Deployment
Choose your preferred deployment platform:
* Deploy on [Fly.io](https://fly.io/docs/rails/getting-started/)
* Deploy on [Heroku](https://devcenter.heroku.com/articles/getting-started-with-rails7)
## Contribution
Contributions to enhance this starter are highly encouraged and welcomed! Feel free to submit pull requests and improve the project collaboratively.", Assign "at most 3 tags" to the expected json: {"id":"3990","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"