base on Build Ruby on Rails apps 10x faster [![Gem Version](https://badge.fury.io/rb/avo.svg)](https://badge.fury.io/rb/avo)
[![System Tests](https://github.com/avo-hq/avo/actions/workflows/system-tests.yml/badge.svg)](https://github.com/avo-hq/avo/actions/workflows/system-tests.yml)
[![Feature Tests](https://github.com/avo-hq/avo/actions/workflows/feature-tests.yml/badge.svg)](https://github.com/avo-hq/avo/actions/workflows/feature-tests.yml)
[![Lint](https://github.com/avo-hq/avo/actions/workflows/lint.yml/badge.svg)](https://github.com/avo-hq/avo/actions/workflows/lint.yml)
<a href="https://github.com/avo-hq/avo/discussions" target="_blank">
<img alt="GitHub Discussions" src="https://img.shields.io/github/discussions/avo-hq/avo?color=168AFE&logo=github">
</a>
<a href="https://github.com/avo-hq/avo/issues" target="_blank">
<img alt="GitHub Issues or Pull Requests" src="https://img.shields.io/github/issues-closed/avo-hq/avo?style=flat&link=https%3A%2F%2Fgithub.com%2Favo-hq%2Favo%2Fissues&logo=github">
</a>
<a href="https://rubygems.org/gems/avo">
<img alt="GEM Downloads" src="https://img.shields.io/gem/dt/avo?color=168AFE&logo=ruby&logoColor=FE1616">
</a>
<a href="https://github.com/testdouble/standard">
<img alt="Ruby Style" src="https://img.shields.io/badge/style-standard-168AFE?logo=ruby&logoColor=FE1616" />
</a>
[![codecov](https://codecov.io/gh/avo-hq/avo/branch/master/graph/badge.svg?token=Q2LMFE4989)](https://codecov.io/gh/avo-hq/avo)
[![Maintainability](https://api.codeclimate.com/v1/badges/676a0afa2cc79f03aa29/maintainability)](https://codeclimate.com/github/avo-hq/avo/maintainability)
![](./public/avo-assets/logo-on-white.png)
**<a href="https://avohq.io" title="Ruby on Rails Admin Panel Framework">Avo - Ruby on Rails Admin Panel Framework</a>**
Avo is a very custom Admin Panel Framework, Content Management System, and Internal Tool Builder for Ruby on Rails that saves engineers and teams **months of development time**.
## Get started
âĄď¸ **Install**: [docs.avohq.io/3.0/installation](https://docs.avohq.io/3.0/installation.html)
<br>
⨠**Website**: [avohq.io](https://avohq.io)
<br>
đ **Documentation**: [docs.avohq.io](https://docs.avohq.io)
<br>
đş **Roadmap**: [GitHub Roadmap](https://github.com/orgs/avo-hq/projects/14)
<br>
đ¸ **Demo App**: [Avodemo](https://main.avodemo.com/)
<br>
đ¤ **Twitter**: [`avo_hq`](https://twitter.com/avo_hq)
<br>
đ§ **Issue Tracker**: [GitHub Issues](http://github.com/avo-hq/avo/issues)
<br>
đ **Discussions and Feature Requests**: [GitHub Discussions](http://github.com/avo-hq/avo/discussions)
## Features
- **Powered by Hotwire** - Rails â¤ď¸ Hotwire
- **Code driven configuration** - Configure your Rails dashboard entirely by writing Ruby code. [docs](https://docs.avohq.io/3.0/resources.html#defining-resources)
- **Resource Management** - Create a CRUD interface for Active Record from one command. No more copy-pasting view and controller files around.
- **Dashboard widgets and metrics** - Create metrics, charts, and custom cards amazingly fast. [docs](https://docs.avohq.io/3.0/dashboards.html)
- **Resource Search** - Quickly run a search through one or more resources at once. [docs](https://docs.avohq.io/3.0/search.html)
- **Associations enabled** - Link your models together with all types of associations (belongs_to, has_many, polymorphic, etc.). [docs](https://docs.avohq.io/3.0/associations.html)
- **Fuzzy-searchable associations** - Do you have a ton of records and don't want to scroll through a big dropdown? Avo's got you covered. [docs](https://docs.avohq.io/3.0/associations/belongs_to.html#searchable)
- **Active Storage support** - Amazingly easy, **one-line**, single or multi-file integration with **ActiveStorage**. [docs](https://docs.avohq.io/3.0/fields/file.html)
- **Records Ordering** - Sorting records is a breeze. [docs](https://docs.avohq.io/3.0/records-reordering.html)
- **Grid view** - Beautiful card layout to showcase your content. [docs](https://docs.avohq.io/3.0/grid-view.html)
- **Actions** - Run custom actions to one or more of your resources with as little as pressing a button đŞ [docs](https://docs.avohq.io/3.0/actions.html)
- **Filters** - Write your own custom filters to quickly segment your data. [docs](https://docs.avohq.io/3.0/filters.html)
- **Keeps your app clean** - You don't need to change your app to use Avo. Drop it in your existing app or add it to a new one and you're done đ [docs](https://docs.avohq.io/3.0/installation.html)
- **Custom fields**- No worries if we missed a field you need. Generate a custom field in a jiffy. [docs](https://docs.avohq.io/3.0/custom-fields.html)
- **Custom tools** - Break out of the CRUD. Do you need to add a page with something completely new? You've got it! [docs](https://docs.avohq.io/3.0/custom-tools.html)
- **Authorization** - Leverage Pundit policies to build a robust and scalable authorization system. [docs](https://docs.avohq.io/3.0/authorization.html)
- **Localization** - Have it available in any language you need. [docs](https://docs.avohq.io/3.0/localization.html)
- **No asset pipeline pollution** - Bring your own asset pipeline. [docs](https://docs.avohq.io/3.0/custom-asset-pipeline.html)
- **Mobile interface** - Check your data on the go from any mobile device.
- **Tabbed interface** - Conditionally show the data you need
- **Menu builder** - Group and surface information as you need to
- **Branding** - Make it look
## Some of the things we're going to focus on next
Theming âď¸ notifications âď¸ Resource segmentation âď¸ inline editing âď¸ multilingual records âď¸ keyboard shortcuts âď¸ track resource changes âď¸ live resources âď¸ columns view âď¸ list view âď¸ custom action items âď¸ command bar
For more up-to-date info check out our đş [Roadmap](https://github.com/orgs/avo-hq/projects/14).
# Installation
Use this RailsBytes template to get started quick `rails app:template LOCATION='https://avohq.io/app-template'`. If you need a more detailed guide, follow [this page](https://docs.avohq.io/3.0/installation.html).
# Contributing
Please read [CONTRIBUTING.MD](./CONTRIBUTING.MD)
# Upgrade Guide
Please read the [UPGRADE_GUIDE.MD](https://docs.avohq.io/3.0/upgrade.html)
# Release schedule
Please read the [RELEASE.MD](./RELEASE.MD)
# ⨠[Contributors](https://avohq.io/contributors)
<a href="https://avohq.io/contributors">
<img src="https://contrib.rocks/image?repo=avo-hq/avo" />
</a>
<!-- https://contrib.rocks -->
# đĽ Sponsors
<table>
<tr>
<td>
<a href="https://www.greenhats.com/?utm_source=github&utm_medium=link&utm_campaign=avo" target="_blank">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://avohq.io/img/sponsors/greenhats-dark.png">
<img alt="Greenhats Start-up Sponsor" src="https://avohq.io/img/sponsors/greenhats-light.png" width="360px">
</picture>
</a>
</td>
</tr>
</table>
[Become a sponsor](mailto:
[email protected])
![Alt](https://repobeats.axiom.co/api/embed/1481a6a259064f02a7936470d12a50802a9c98a4.svg "Repobeats analytics image")
# Shoutouts
[Get a box of waffles and some of the best app monitoring from Appsignal](https://appsignal.com/r/93dbe69bfb) đ§
[Get $100 in credits from Digital Ocean](https://www.digitalocean.com/?refcode=efc1fe881d74&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge) đ¸
## Other Open Source Work
- [`active_storage-blurhash`](https://github.com/avo-hq/active_storage-blurhash) - A plug-n-play [blurhash](https://blurha.sh/) integration for images stored in ActiveStorage
- [`class_variants`](https://github.com/avo-hq/class_variants) - Easily configure styles and apply them as classes. Very useful when you're implementing Tailwind CSS components and call them with different states.
- [`prop_initializer`](https://github.com/avo-hq/prop_initializer) - A flexible tool for defining properties on Ruby classes.
- [`stimulus-confetti`](https://github.com/avo-hq/stimulus-confetti) - The easiest way to add confetti to your StimulusJS app
", Assign "at most 3 tags" to the expected json: {"id":"7438","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"