Export Collection

Export "InventList Production Stack" in different formats for sharing or LLM use.

Markdown Preview

# InventList Production Stack

> A curated stack collection by [@nauman](https://builtonrails.com/@nauman)

The complete tech stack powering InventList - a SaaS inventory management platform with component-driven UI and Stripe billing.

## LLM Context

```markdown
This collection represents the production stack for InventList (inventlist.com), a SaaS inventory management platform.

## Project Context
InventList is a B2B SaaS platform for:
- Product/inventory tracking
- Catalog management
- Analytics and reporting
- Team collaboration
- Stripe subscription billing

## Architecture Philosophy
This stack combines Rails conventions with modern component-driven UI:
- ViewComponent + Phlex for reusable UI components
- Shadcn-UI Rails port for consistent design system
- Devise + Passwordless for flexible authentication
- Pay gem for subscription management

## Key Technical Decisions
1. **Database**: PostgreSQL with pg_search for search
2. **Authentication**: Devise + Passwordless (magic links)
3. **Authorization**: CanCanCan for role-based access
4. **UI Components**: ViewComponent + Phlex + Shadcn-UI
5. **Payments**: Pay gem + Stripe (subscriptions, invoices)
6. **Analytics**: Ahoy for tracking, Chartkick + Groupdate for visualization
7. **Background Jobs**: Redis-backed (Sidekiq-compatible)
8. **Assets**: jsbundling-rails + cssbundling-rails

## Component Architecture
The app uses a hybrid component approach:
- Phlex for lightweight, Ruby-first components
- ViewComponent for complex, testable components
- Shadcn-UI patterns ported to Rails

## When using this stack
- Use components for any repeated UI pattern
- Leverage Pay gem's built-in Stripe webhooks
- Use Ahoy for all analytics tracking
- Prefer magic links over passwords for auth

```

## Stacks

1. **Ruby on Rails** (Framework)
2. **PostgreSQL** (Database)
3. **Redis** (Database)
4. **Stimulus** (Frontend)
5. **Turbo** (Frontend)
6. **ViewComponent** (Frontend)
7. **Hotwire** (Frontend)
8. **pg_search** (Search)
9. **Stripe** (Payments)
10. **Pay** (Payments)
11. **Capybara** (Testing)
12. **Ahoy** (Analytics)
13. **letter_opener** (DevOps)
14. **Minitest** (Testing)
15. **Propshaft** (Frontend)
16. **Jbuilder** (Framework)
17. **Pagy** (Framework)
18. **Tailwind CSS** (Frontend)
19. **Puma** (DevOps)
20. **Bootsnap** (DevOps)
21. **FriendlyId** (Framework)
22. **Chartkick** (Analytics)
23. **Groupdate** (Analytics)
24. **Redcarpet** (Frontend)
25. **Solid Queue** (Background)
26. **Heroicon** (Frontend)

## Machine-Readable Data

```json
{
  "name": "InventList Production Stack",
  "slug": "inventlist-production-stack",
  "description": "The complete tech stack powering InventList - a SaaS inventory management platform with component-driven UI and Stripe billing.",
  "llm_prompt": "This collection represents the production stack for InventList (inventlist.com), a SaaS inventory management platform.\n\n## Project Context\nInventList is a B2B SaaS platform for:\n- Product/inventory tracking\n- Catalog management\n- Analytics and reporting\n- Team collaboration\n- Stripe subscription billing\n\n## Architecture Philosophy\nThis stack combines Rails conventions with modern component-driven UI:\n- ViewComponent + Phlex for reusable UI components\n- Shadcn-UI Rails port for consistent design system\n- Devise + Passwordless for flexible authentication\n- Pay gem for subscription management\n\n## Key Technical Decisions\n1. **Database**: PostgreSQL with pg_search for search\n2. **Authentication**: Devise + Passwordless (magic links)\n3. **Authorization**: CanCanCan for role-based access\n4. **UI Components**: ViewComponent + Phlex + Shadcn-UI\n5. **Payments**: Pay gem + Stripe (subscriptions, invoices)\n6. **Analytics**: Ahoy for tracking, Chartkick + Groupdate for visualization\n7. **Background Jobs**: Redis-backed (Sidekiq-compatible)\n8. **Assets**: jsbundling-rails + cssbundling-rails\n\n## Component Architecture\nThe app uses a hybrid component approach:\n- Phlex for lightweight, Ruby-first components\n- ViewComponent for complex, testable components\n- Shadcn-UI patterns ported to Rails\n\n## When using this stack\n- Use components for any repeated UI pattern\n- Leverage Pay gem's built-in Stripe webhooks\n- Use Ahoy for all analytics tracking\n- Prefer magic links over passwords for auth\n",
  "visibility": "public",
  "author": {
    "username": "nauman",
    "name": "Nauman Tariq"
  },
  "forked_from": null,
  "stats": {
    "likes": 1,
    "forks": 1,
    "views": 216
  },
  "stacks": [
    {
      "name": "Ruby on Rails",
      "category": "Framework",
      "position": 0,
      "note": null
    },
    {
      "name": "PostgreSQL",
      "category": "Database",
      "position": 1,
      "note": null
    },
    {
      "name": "Redis",
      "category": "Database",
      "position": 2,
      "note": null
    },
    {
      "name": "Stimulus",
      "category": "Frontend",
      "position": 3,
      "note": null
    },
    {
      "name": "Turbo",
      "category": "Frontend",
      "position": 4,
      "note": null
    },
    {
      "name": "ViewComponent",
      "category": "Frontend",
      "position": 5,
      "note": null
    },
    {
      "name": "Hotwire",
      "category": "Frontend",
      "position": 6,
      "note": null
    },
    {
      "name": "pg_search",
      "category": "Search",
      "position": 7,
      "note": null
    },
    {
      "name": "Stripe",
      "category": "Payments",
      "position": 8,
      "note": null
    },
    {
      "name": "Pay",
      "category": "Payments",
      "position": 9,
      "note": null
    },
    {
      "name": "Capybara",
      "category": "Testing",
      "position": 10,
      "note": null
    },
    {
      "name": "Ahoy",
      "category": "Analytics",
      "position": 11,
      "note": null
    },
    {
      "name": "letter_opener",
      "category": "DevOps",
      "position": 12,
      "note": null
    },
    {
      "name": "Minitest",
      "category": "Testing",
      "position": 13,
      "note": null
    },
    {
      "name": "Propshaft",
      "category": "Frontend",
      "position": 14,
      "note": null
    },
    {
      "name": "Jbuilder",
      "category": "Framework",
      "position": 15,
      "note": null
    },
    {
      "name": "Pagy",
      "category": "Framework",
      "position": 16,
      "note": null
    },
    {
      "name": "Tailwind CSS",
      "category": "Frontend",
      "position": 17,
      "note": null
    },
    {
      "name": "Puma",
      "category": "DevOps",
      "position": 18,
      "note": null
    },
    {
      "name": "Bootsnap",
      "category": "DevOps",
      "position": 19,
      "note": null
    },
    {
      "name": "FriendlyId",
      "category": "Framework",
      "position": 20,
      "note": null
    },
    {
      "name": "Chartkick",
      "category": "Analytics",
      "position": 21,
      "note": null
    },
    {
      "name": "Groupdate",
      "category": "Analytics",
      "position": 22,
      "note": null
    },
    {
      "name": "Redcarpet",
      "category": "Frontend",
      "position": 23,
      "note": null
    },
    {
      "name": "Solid Queue",
      "category": "Background",
      "position": 24,
      "note": null
    },
    {
      "name": "Heroicon",
      "category": "Frontend",
      "position": 26,
      "note": null
    }
  ],
  "created_at": "2026-01-22T03:52:18Z",
  "updated_at": "2026-01-22T04:05:47Z",
  "exported_at": "2026-09-20T06:16:41Z"
}
```

---

_Exported from [BuiltOnRails](https://builtonrails.com) on September 20, 2026_
← Back to Collection