{"id":24576205,"url":"https://github.com/maquina-app/maquina_components","last_synced_at":"2026-03-08T22:02:25.225Z","repository":{"id":272538675,"uuid":"916918548","full_name":"maquina-app/maquina_components","owner":"maquina-app","description":"Modern UI components for Ruby on Rails, powered by TailwindCSS and Stimulus","archived":false,"fork":false,"pushed_at":"2026-03-05T02:55:46.000Z","size":2520,"stargazers_count":125,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-05T06:54:46.619Z","etag":null,"topics":["erb-template","rails","shadcn-ui","stimulusjs","ui-components"],"latest_commit_sha":null,"homepage":"https://maquina.app","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maquina-app.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"MIT-LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-15T02:11:55.000Z","updated_at":"2026-03-05T02:55:39.000Z","dependencies_parsed_at":"2025-08-19T05:41:52.880Z","dependency_job_id":null,"html_url":"https://github.com/maquina-app/maquina_components","commit_stats":null,"previous_names":["maquina-app/maquina_components"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/maquina-app/maquina_components","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maquina-app%2Fmaquina_components","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maquina-app%2Fmaquina_components/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maquina-app%2Fmaquina_components/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maquina-app%2Fmaquina_components/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maquina-app","download_url":"https://codeload.github.com/maquina-app/maquina_components/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maquina-app%2Fmaquina_components/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30268817,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T17:53:40.517Z","status":"ssl_error","status_checked_at":"2026-03-08T17:53:40.101Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["erb-template","rails","shadcn-ui","stimulusjs","ui-components"],"created_at":"2025-01-23T22:22:11.284Z","updated_at":"2026-03-08T22:02:25.194Z","avatar_url":"https://github.com/maquina-app.png","language":"HTML","funding_links":[],"categories":["HTML"],"sub_categories":[],"readme":"# Maquina Components\n\nUI components for Ruby on Rails, built with ERB, TailwindCSS 4.0, and Stimulus.\n\n---\n\n## Why This Exists\n\nI started building components inspired by [shadcn/ui](https://ui.shadcn.com/) for production Rails applications—mainly dashboards and admin interfaces. Over time, I iterated on these components across multiple projects, and they became inconsistent: different APIs, different styling approaches, different levels of completeness.\n\nIt was time to extract the elements I use most and give them a **cohesive API and consistent styling**.\n\n### The Technical Choices\n\nI chose **ERB partials** with **TailwindCSS** and **Stimulus controllers** for interactive elements. For static components like form inputs, pure CSS with data attributes is enough.\n\nI'm aware of alternatives like [ViewComponent](https://viewcomponent.org/) and [Phlex](https://www.phlex.fun/). The projects I extracted these components from didn't use them. I see the benefits of using a Ruby class to render the UI, but bringing in any of these libraries into a project is a big commitment, and not all projects and teams are open to doing it. The reason is not technical; it is the feeling of moving away from \"the Rails way.\" So I kept it simple: ERB partials that any Rails developer can understand immediately.\n\n### Composability Over Convenience\n\nThese components are built to be **composable**. They are built of many small ERB partials to render. But that's intentional—you can take these partials and compose them into larger, application-specific components. There are no limits, and you have a standard API to guide you.\n\nI didn't copy shadcn/ui one-to-one. I extracted only the components I actually use in my applications. This is a practical toolkit, not a complete port.\n\n### One Approach Among Many\n\nThere's no single UI kit that rules Rails development. If this approach doesn't resonate with you, here are excellent alternatives:\n\n- [RailsUI](https://railsui.com) — Premium UI templates and components\n- [RailsBlocks](https://railsblocks.com) — Copy-paste components for Rails\n- [shadcn-rails](https://shadcn.rails-components.com) — Another shadcn/ui port for Rails\n- [Inertia Rails + shadcn Starter](https://evilmartians.com/opensource/inertia-rails-shadcn-starter) — React/Vue components with Inertia\n\nIf you're open to trying maquina_components and providing feedback, you're welcome to do so. If this isn't for you, that's okay too.\n\n---\n\n## Features\n\n- **ERB partials** with strict locals (`locals:` magic comments)\n- **TailwindCSS 4.0** with CSS custom properties for theming\n- **Data attributes** (`data-component`, `data-*-part`) for CSS styling\n- **Stimulus controllers** only used where interactivity is needed\n- **Dark mode** support via CSS variables\n- **shadcn/ui theming** convention (works with their color system)\n- **Composable** — small partials you can combine freely\n\n![Test dummy app with light mode](/imgs/light.png)\n\n![Test dummy app with dark mode](/imgs/dark.png)\n\n---\n\n## Quick Start\n\n### 1. Add the Gem\n\n```ruby\n# Gemfile\ngem \"maquina-components\"\n```\n\n```bash\nbundle install\n```\n\n### 2. Run the Install Generator\n\n```bash\nbin/rails generate maquina_components:install\n```\n\nThis will:\n\n- Add the engine CSS import to your Tailwind file\n- Add theme variables (light + dark mode)\n- Create a helper file for icon customization\n\n### 3. Use Components\n\n```erb\n\u003c%= render \"components/card\" do %\u003e\n  \u003c%= render \"components/card/header\" do %\u003e\n    \u003c%= render \"components/card/title\", text: \"Account Settings\" %\u003e\n    \u003c%= render \"components/card/description\", text: \"Manage your preferences\" %\u003e\n  \u003c% end %\u003e\n  \u003c%= render \"components/card/content\" do %\u003e\n    \u003c!-- Your content --\u003e\n  \u003c% end %\u003e\n\u003c% end %\u003e\n```\n\nFor form elements, use data attributes with Rails helpers:\n\n```erb\n\u003c%= form_with model: @user do |f| %\u003e\n  \u003c%= f.text_field :name, data: { component: \"input\" } %\u003e\n  \u003c%= f.email_field :email, data: { component: \"input\" } %\u003e\n  \u003c%= f.submit \"Save\", data: { component: \"button\", variant: \"primary\" } %\u003e\n\u003c% end %\u003e\n```\n\n**[Full Getting Started Guide](https://maquina.app/documentation/components/)**\n\n---\n\n## Generator Options\n\n```bash\n# Default: adds everything\nbin/rails generate maquina_components:install\n\n# Skip theme variables (if you have your own)\nbin/rails generate maquina_components:install --skip-theme\n\n# Skip helper file\nbin/rails generate maquina_components:install --skip-helper\n```\n\n**Prerequisite:** [tailwindcss-rails](https://github.com/rails/tailwindcss-rails) must be installed first.\n\n---\n\n## Available Components\n\n### Layout Components\n\n| Component | Description | Documentation |\n|-----------|-------------|---------------|\n| **Sidebar** | Collapsible navigation with cookie persistence | [Sidebar](https://maquina.app/documentation/components/sidebar/) |\n| **Header** | Top navigation bar | [Header](https://maquina.app/documentation/components/header/) |\n\n### Content Components\n\n| Component | Description | Documentation |\n|-----------|-------------|---------------|\n| **Card** | Content container with header, content, footer | [Card](https://maquina.app/documentation/components/card/) |\n| **Alert** | Callout messages (info, warning, error) | [Alert](https://maquina.app/documentation/components/alert/) |\n| **Badge** | Status indicators and labels | [Badge](https://maquina.app/documentation/components/badge/) |\n| **Table** | Data tables with sorting support | [Table](https://maquina.app/documentation/components/table/) |\n| **Empty State** | Placeholder for empty lists | [Empty State](https://maquina.app/documentation/components/empty/) |\n\n### Navigation Components\n\n| Component | Description | Documentation |\n|-----------|-------------|---------------|\n| **Breadcrumbs** | Navigation trail with overflow handling | [Breadcrumbs](https://maquina.app/documentation/components/breadcrumbs/) |\n| **Dropdown Menu** | Accessible dropdown with keyboard navigation | [Dropdown Menu](https://maquina.app/documentation/components/dropdown-menu/) |\n| **Pagination** | Page navigation with Pagy integration | [Pagination](https://maquina.app/documentation/components/pagination/) |\n\n### Interactive Components\n\n| Component | Description | Documentation |\n|-----------|-------------|---------------|\n| **Calendar** | Inline date picker with single/range selection | [Calendar](https://maquina.app/documentation/components/calendar/) |\n| **Combobox** | Searchable dropdown with keyboard navigation | [Combobox](https://maquina.app/documentation/components/combobox/) |\n| **Date Picker** | Popover-based date selection | [Date Picker](https://maquina.app/documentation/components/date-picker/) |\n| **Toggle Group** | Single/multiple selection button group | [Toggle Group](https://maquina.app/documentation/components/toggle-group/) |\n\n### Feedback Components\n\n| Component | Description | Documentation |\n|-----------|-------------|---------------|\n| **Toast** | Non-intrusive notifications with auto-dismiss | [Toast](https://maquina.app/documentation/components/toast/) |\n\n### Form Components\n\n| Component | Data Attribute | Variants |\n|-----------|----------------|----------|\n| **Button** | `data-component=\"button\"` | default, primary, secondary, destructive, outline, ghost, link |\n| **Input** | `data-component=\"input\"` | — |\n| **Textarea** | `data-component=\"textarea\"` | — |\n| **Select** | `data-component=\"select\"` | — |\n| **Checkbox** | `data-component=\"checkbox\"` | — |\n| **Radio** | `data-component=\"radio\"` | — |\n| **Switch** | `data-component=\"switch\"` | — |\n\n**[Form Components Guide](https://maquina.app/documentation/components/form/)**\n\n---\n\n## Examples\n\n### Cards with Actions\n\n```erb\n\u003c%= render \"components/card\" do %\u003e\n  \u003c%= render \"components/card/header\", layout: :row do %\u003e\n    \u003cdiv\u003e\n      \u003c%= render \"components/card/title\", text: \"Team Members\" %\u003e\n      \u003c%= render \"components/card/description\", text: \"Manage your team\" %\u003e\n    \u003c/div\u003e\n    \u003c%= render \"components/card/action\" do %\u003e\n      \u003c%= link_to \"Add Member\", new_member_path,\n        data: { component: \"button\", variant: \"primary\", size: \"sm\" } %\u003e\n    \u003c% end %\u003e\n  \u003c% end %\u003e\n  \u003c%= render \"components/card/content\" do %\u003e\n    \u003c!-- Table or list --\u003e\n  \u003c% end %\u003e\n\u003c% end %\u003e\n```\n\n### Alerts\n\n```erb\n\u003c%= render \"components/alert\", variant: :destructive do %\u003e\n  \u003c%= render \"components/alert/title\", text: \"Error\" %\u003e\n  \u003c%= render \"components/alert/description\" do %\u003e\n    Your session has expired. Please log in again.\n  \u003c% end %\u003e\n\u003c% end %\u003e\n```\n\n### Badges\n\n```erb\n\u003c%= render \"components/badge\", variant: :success do %\u003eActive\u003c% end %\u003e\n\u003c%= render \"components/badge\", variant: :warning do %\u003ePending\u003c% end %\u003e\n\u003c%= render \"components/badge\", variant: :destructive do %\u003eFailed\u003c% end %\u003e\n```\n\n### Toggle Group\n\n```erb\n\u003c%= render \"components/toggle_group\", type: :single, variant: :outline do %\u003e\n  \u003c%= render \"components/toggle_group/item\", value: \"left\", aria_label: \"Align left\" do %\u003e\n    \u003c%= icon_for :align_left %\u003e\n  \u003c% end %\u003e\n  \u003c%= render \"components/toggle_group/item\", value: \"center\", aria_label: \"Align center\" do %\u003e\n    \u003c%= icon_for :align_center %\u003e\n  \u003c% end %\u003e\n  \u003c%= render \"components/toggle_group/item\", value: \"right\", aria_label: \"Align right\" do %\u003e\n    \u003c%= icon_for :align_right %\u003e\n  \u003c% end %\u003e\n\u003c% end %\u003e\n```\n\n### Dropdown Menu\n\n```erb\n\u003c%= render \"components/dropdown_menu\" do %\u003e\n  \u003c%= render \"components/dropdown_menu/trigger\" do %\u003eOptions\u003c% end %\u003e\n  \u003c%= render \"components/dropdown_menu/content\" do %\u003e\n    \u003c%= render \"components/dropdown_menu/item\", href: profile_path do %\u003e\n      \u003c%= icon_for :user %\u003e\n      Profile\n    \u003c% end %\u003e\n    \u003c%= render \"components/dropdown_menu/separator\" %\u003e\n    \u003c%= render \"components/dropdown_menu/item\", href: logout_path, method: :delete, variant: :destructive do %\u003e\n      \u003c%= icon_for :log_out %\u003e\n      Logout\n    \u003c% end %\u003e\n  \u003c% end %\u003e\n\u003c% end %\u003e\n```\n\n### Pagination\n\n```erb\n\u003c%= pagination_nav(@pagy, :users_path) %\u003e\n```\n\n### Combobox\n\n```erb\n\u003c%= render \"components/combobox\", placeholder: \"Select framework...\" do |combobox_id| %\u003e\n  \u003c%= render \"components/combobox/trigger\", for_id: combobox_id, placeholder: \"Select framework...\" %\u003e\n  \u003c%= render \"components/combobox/content\", id: combobox_id do %\u003e\n    \u003c%= render \"components/combobox/input\", placeholder: \"Search...\" %\u003e\n    \u003c%= render \"components/combobox/list\" do %\u003e\n      \u003c%= render \"components/combobox/option\", value: \"rails\" do %\u003eRuby on Rails\u003c% end %\u003e\n      \u003c%= render \"components/combobox/option\", value: \"hanami\" do %\u003eHanami\u003c% end %\u003e\n      \u003c%= render \"components/combobox/option\", value: \"sinatra\" do %\u003eSinatra\u003c% end %\u003e\n    \u003c% end %\u003e\n    \u003c%= render \"components/combobox/empty\" %\u003e\n  \u003c% end %\u003e\n\u003c% end %\u003e\n```\n\n### Toast Notifications\n\n```erb\n\u003c%# Add toaster to your layout %\u003e\n\u003c%= render \"components/toaster\", position: :bottom_right do %\u003e\n  \u003c%= toast_flash_messages %\u003e\n\u003c% end %\u003e\n\n\u003c%# In your controller %\u003e\nflash[:success] = \"Changes saved successfully!\"\n\n\u003c%# Or use the JavaScript API %\u003e\n\u003cscript\u003e\n  Toast.success(\"Profile updated!\")\n  Toast.error(\"Something went wrong\", { description: \"Please try again.\" })\n\u003c/script\u003e\n```\n\n### Tables\n\n```erb\n\u003c%= render \"components/table\" do %\u003e\n  \u003c%= render \"components/table/header\" do %\u003e\n    \u003c%= render \"components/table/row\" do %\u003e\n      \u003c%= render \"components/table/head\" do %\u003eName\u003c% end %\u003e\n      \u003c%= render \"components/table/head\" do %\u003eEmail\u003c% end %\u003e\n      \u003c%= render \"components/table/head\" do %\u003eRole\u003c% end %\u003e\n    \u003c% end %\u003e\n  \u003c% end %\u003e\n  \u003c%= render \"components/table/body\" do %\u003e\n    \u003c% @users.each do |user| %\u003e\n      \u003c%= render \"components/table/row\" do %\u003e\n        \u003c%= render \"components/table/cell\" do %\u003e\u003c%= user.name %\u003e\u003c% end %\u003e\n        \u003c%= render \"components/table/cell\" do %\u003e\u003c%= user.email %\u003e\u003c% end %\u003e\n        \u003c%= render \"components/table/cell\" do %\u003e\n          \u003c%= render \"components/badge\", variant: :outline do %\u003e\u003c%= user.role %\u003e\u003c% end %\u003e\n        \u003c% end %\u003e\n      \u003c% end %\u003e\n    \u003c% end %\u003e\n  \u003c% end %\u003e\n\u003c% end %\u003e\n```\n\n### Sidebar Layout\n\n```erb\n\u003c%= render \"components/sidebar/provider\", default_open: app_sidebar_open? do %\u003e\n  \u003c%= render \"components/sidebar\" do %\u003e\n    \u003c%= render \"components/sidebar/header\" do %\u003e\n      \u003cspan class=\"font-semibold\"\u003eMy App\u003c/span\u003e\n    \u003c% end %\u003e\n    \n    \u003c%= render \"components/sidebar/content\" do %\u003e\n      \u003c%= render \"components/sidebar/group\", title: \"Navigation\" do %\u003e\n        \u003c%= render \"components/sidebar/menu\" do %\u003e\n          \u003c%= render \"components/sidebar/menu_item\" do %\u003e\n            \u003c%= render \"components/sidebar/menu_button\",\n              title: \"Dashboard\",\n              url: dashboard_path,\n              icon_name: :home,\n              active: current_page?(dashboard_path) %\u003e\n          \u003c% end %\u003e\n        \u003c% end %\u003e\n      \u003c% end %\u003e\n    \u003c% end %\u003e\n  \u003c% end %\u003e\n\n  \u003c%= render \"components/sidebar/inset\" do %\u003e\n    \u003c%= render \"components/header\" do %\u003e\n      \u003c%= render \"components/sidebar/trigger\", icon_name: :panel_left %\u003e\n    \u003c% end %\u003e\n    \n    \u003cmain class=\"flex-1 p-6\"\u003e\n      \u003c%= yield %\u003e\n    \u003c/main\u003e\n  \u003c% end %\u003e\n\u003c% end %\u003e\n```\n\n---\n\n## Theming\n\nComponents use CSS variables following the [shadcn/ui theming convention](https://ui.shadcn.com/docs/theming).\n\nThe install generator adds default theme variables. Customize them in `app/assets/tailwind/application.css`:\n\n```css\n:root {\n  /* Change primary to blue */\n  --primary: oklch(0.488 0.243 264.376);\n  --primary-foreground: oklch(0.985 0 0);\n  \n  /* Add custom colors */\n  --success: oklch(0.6 0.2 145);\n  --success-foreground: oklch(0.985 0 0);\n}\n\n@theme {\n  --color-success: var(--success);\n  --color-success-foreground: var(--success-foreground);\n}\n```\n\n---\n\n## Helper Methods\n\n| Helper | Purpose |\n|--------|---------|\n| `icon_for(name, options)` | Render an SVG icon |\n| `sidebar_state(cookie_name)` | Get sidebar state (`:expanded` or `:collapsed`) |\n| `sidebar_open?(cookie_name)` | Check if the sidebar is expanded |\n| `pagination_nav(pagy, route)` | Render pagination from Pagy object |\n| `pagination_simple(pagy, route)` | Render simple Previous/Next pagination |\n| `toast_flash_messages` | Render all flash messages as toasts |\n| `toast(variant, title, **options)` | Render a single toast notification |\n| `combobox(placeholder:, **options, \u0026block)` | Builder pattern for combobox |\n| `combobox_simple(options:, **options)` | Data-driven simple combobox |\n\n---\n\n## Documentation\n\n### Getting Started\n\n- **[Getting Started](https://maquina.app/documentation/components/)** — Installation and setup\n\n### Layout\n\n- **[Sidebar](https://maquina.app/documentation/components/sidebar/)** — Navigation sidebar\n- **[Header](https://maquina.app/documentation/components/header/)** — Top navigation bar\n\n### Content\n\n- **[Card](https://maquina.app/documentation/components/card/)** — Content containers\n- **[Alert](https://maquina.app/documentation/components/alert/)** — Callout messages\n- **[Badge](https://maquina.app/documentation/components/badge/)** — Status indicators\n- **[Table](https://maquina.app/documentation/components/table/)** — Data tables\n- **[Empty State](https://maquina.app/documentation/components/empty/)** — Empty state placeholders\n\n### Navigation\n\n- **[Breadcrumbs](https://maquina.app/documentation/components/breadcrumbs/)** — Navigation trails\n- **[Dropdown Menu](https://maquina.app/documentation/components/dropdown-menu/)** — Dropdown menus\n- **[Pagination](https://maquina.app/documentation/components/pagination/)** — Page navigation\n\n### Interactive\n\n- **[Calendar](https://maquina.app/documentation/components/calendar/)** — Inline date picker\n- **[Combobox](https://maquina.app/documentation/components/combobox/)** — Searchable dropdown selection\n- **[Date Picker](https://maquina.app/documentation/components/date-picker/)** — Popover date selection\n- **[Toggle Group](https://maquina.app/documentation/components/toggle-group/)** — Toggle button groups\n\n### Feedback\n\n- **[Toast](https://maquina.app/documentation/components/toast/)** — Toast notifications\n\n### Forms\n\n- **[Form Components](https://maquina.app/documentation/components/form/)** — Buttons, inputs, and form styling\n\n---\n\n## Development\n\nRun the dummy app:\n\n```bash\ncd test/dummy\nbin/rails server\n```\n\nRun tests:\n\n```bash\nbin/rails test\n```\n\n---\n\n## Claude Code Skill\n\nThis repository includes a Claude Code skill that teaches Claude how to build consistent, accessible UIs using maquina_components. The skill provides:\n\n- **Component catalog** — Complete reference for all components with ERB examples\n- **Form patterns** — Validation, error handling, and complex form structures\n- **Layout patterns** — Sidebar navigation, page structure, responsive design\n- **Turbo integration** — Turbo Frames, Streams, and component updates\n- **Spec checklist** — Review criteria for UI implementation quality\n\n### Installation\n\nCopy the `skill/` directory to your Rails project:\n\n```bash\ncp -r /path/to/maquina_components/skill .claude/skills/maquina-ui-standards\n```\n\nSee the [Skill README](skill/README.md) for detailed installation and usage instructions.\n\n---\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at [github.com/maquina-app/maquina_components](https://github.com/maquina-app/maquina_components).\n\n---\n\n## License\n\nCopyright (c) [Mario Alberto Chávez Cárdenas](https://mariochavez.io)\n\nThe gem is available as open source under the terms of the [MIT License](MIT-LICENSE).\n\n---\n\n## Credits\n\n- Design patterns from [shadcn/ui](https://ui.shadcn.com/)\n- Built with [TailwindCSS](https://tailwindcss.com/)\n- Powered by [Ruby on Rails](https://rubyonrails.org/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaquina-app%2Fmaquina_components","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaquina-app%2Fmaquina_components","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaquina-app%2Fmaquina_components/lists"}