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_