Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
26d75e7
added bg
priyanshusingh305 Oct 13, 2025
3a0216b
feat: add new components and update styles for improved UI/UX
priyanshusingh305 Oct 15, 2025
7a1e4e7
search component
priyanshusingh305 Oct 15, 2025
c734dce
fixed issue with crm page due to changes in utils file by shadcn inst…
priyanshusingh305 Oct 15, 2025
4d7e2a2
feat: update search layout background and improve tag color handling
priyanshusingh305 Oct 15, 2025
f6fe8d4
feat: add WhyChooseUs component to enhance product page details
priyanshusingh305 Oct 16, 2025
cc6cb3d
added Structure refrence
priyanshusingh305 Oct 16, 2025
3840c09
added types
priyanshusingh305 Oct 16, 2025
62a1e43
feat: add ProductHeader component to display product details on the p…
priyanshusingh305 Oct 16, 2025
db96a07
refactor: remove unused params from ProductHeaderProps interface
priyanshusingh305 Oct 16, 2025
5055d7f
feat: update ProductHeader component with new action buttons and icons
priyanshusingh305 Oct 16, 2025
bf65e09
feat: enhance ProductHeader component with tab navigation and updated…
priyanshusingh305 Oct 16, 2025
287ef6a
feat: add ProductInfo component to display detailed product information
priyanshusingh305 Oct 16, 2025
850b983
feat: add KeyFeatures component and integrate it into ProductPage
priyanshusingh305 Oct 17, 2025
4cb66c5
Add pricing, integrations, and buying guide components
Priyanshu-ai902 Oct 17, 2025
f94767e
feat: add SoftwareComparisonCarousel component and integrate it into …
priyanshusingh305 Oct 17, 2025
8a68d2a
Merge branch 'listing-page' of github.com:SalesUpLabs/appsutra into l…
priyanshusingh305 Oct 17, 2025
fc24cdc
feat: enhance ProductPage with BuyingGuide and Integrations component…
priyanshusingh305 Oct 17, 2025
a98f31a
fix: update icon sizes and improve layout for WhyChooseUs component
priyanshusingh305 Oct 18, 2025
0fdaa14
feat: update pricingOverview and productHeader components; standardiz…
priyanshusingh305 Oct 18, 2025
0c9b0b3
fix: enhance ProductPage and ProductInfo components; improve layout, …
priyanshusingh305 Oct 18, 2025
dd97d8b
feat: add BrandIcon component for dynamic brand icon rendering; updat…
priyanshusingh305 Oct 18, 2025
beb4c0a
feat: update ProductPage layout; integrate BuyingGuide and KeyFeature…
priyanshusingh305 Oct 18, 2025
840fc14
Buying Guide UI fixed
priyanshusingh305 Oct 18, 2025
8d1d5fd
Pricing overview fixed
priyanshusingh305 Oct 18, 2025
81686f8
Integration page fixed
priyanshusingh305 Oct 18, 2025
d38069c
feat: update Product data structure to replace free plan with trial p…
priyanshusingh305 Oct 18, 2025
9020ea1
feat: Refactor product listing and details page to use markdown-based…
priyanshusingh305 Oct 18, 2025
3e9738e
feat: Update README and listings structure to organize products by ca…
priyanshusingh305 Oct 18, 2025
96c512a
feat: Replace listings with products in category page and implement P…
priyanshusingh305 Oct 18, 2025
ddefe4b
feat: Refactor product handling and update schema; replace listings w…
priyanshusingh305 Oct 18, 2025
17ab526
feat: Add IDs to sections in product detail pages for better navigation
priyanshusingh305 Oct 18, 2025
a8be03d
feat: Implement fluid typography and spacing across product detail co…
priyanshusingh305 Oct 22, 2025
b1c3807
feat: Update icon styles and layout in WhyChooseUs component for impr…
priyanshusingh305 Oct 22, 2025
1fdf482
feat: Update padding styles for improved layout in ProductPage component
priyanshusingh305 Oct 22, 2025
08d9517
feat: Comment out Header and Footer components in NotFound page
priyanshusingh305 Oct 22, 2025
e2c2066
feat: Add new icons for Key Features, Product Details, Pricing Overvi…
priyanshusingh305 Oct 23, 2025
de388da
refactor: Remove unused components and functions to streamline codebase
priyanshusingh305 Oct 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ dist

# Gatsby files
.cache/
public

# Storybook build outputs
.out
Expand Down
194 changes: 149 additions & 45 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,58 +22,91 @@ AppSutra is a community-driven directory of SaaS products optimized for Indian b
### Adding Your Product

1. **Fork this repository**
2. **Create your listing file** at `listings/<category>/<slug>.md`
2. **Create your listing file** at `listings/<category-folder>/<your-product>.md`
3. **Fill in the details** using our template (see example below)
4. **Open a Pull Request** - our validation will run automatically
5. **Get reviewed** by maintainers and go live!

> **Note:** Slugs are auto-generated from your `name` and `category` fields in YAML. The filename must match `slugify(name)` and the folder must match `slugify(category)`. Validation runs automatically on PR submission.

### Example Listing Structure

```yaml
---
name: "Zoho CRM"
slug: "zoho-crm"
category: "crm"
website: "https://www.zoho.com/crm/"
logo: "https://example.com/logo.png"
pricing: "Free + Paid from ₹900/mo"
locations: ["India", "Global"]
use_cases: ["SMB", "Sales Automation", "Lead Management"]
keywords: ["crm", "sales", "automation"]
trial: true
integrations: ["Gmail", "WhatsApp", "Zapier"]
contact_email: "partners@zoho.com"
listing_owner_github: "@zohocrm"
verified: false
updated_at: "2025-09-15"
icon: "https://example.com/logo.png"
name: "Razorpay"
company: "Razorpay Software Private Limited"
trialPlan: true
trialPlanPricing: "Free"
category: "Finance"
# IMPORTANT: Do NOT add 'slug' or 'categorySlug' fields
# They are auto-generated during validation and build from 'name' and 'category'
# - Filename must be: slugify("Razorpay") = "razorpay.md"
# - Folder must be: slugify("Finance") = "finance/"
# - Location: listings/finance/razorpay.md
useCases:
- "Online Payments"
- "E-commerce"
- "Subscription Billing"
keywords:
- "payment gateway"
- "online payments"
- "e-commerce"
integration:
- title: "Shopify"
- title: "WooCommerce"
- title: "Zapier"
description: |
Razorpay is a comprehensive payment gateway platform designed to empower businesses...

**Key Highlights**
- Comprehensive payment processing platform
- Accept payments globally through multiple channels
- Simple API integrations for developers
locations:
- "India"
- "Global"
website: "https://razorpay.com/"
updated_at: "2025-01-18"
keyFeatures:
description: "Razorpay offers a full range of payment tools..."
features:
- title: "Payment Gateway"
desc: "Accept payments via credit cards, debit cards, UPI, wallets."
- title: "Subscription Management"
desc: "Create and manage recurring billing for subscription-based businesses."
# Maximum 8 features
buyingGuide:
- question: "1. What's your business model?"
why: "Helps determine the payment features you need"
answer: "E-commerce, subscription-based, service-based, or other?"
# Maximum 8 questions
pricing:
desc: "Razorpay offers flexible pricing plans..."
plans:
- name: "Basic Plan"
pricing:
amount: 0
currency: "INR"
currencySymbol: "₹"
period: "month"
perUnit: null
description: "Free plan with all essential features."
# Maximum 4 plans
---

**About**

Zoho CRM is a comprehensive customer relationship management platform designed for businesses of all sizes...

**Highlights**
- Advanced pipeline management
- WhatsApp integration for India
- Mobile apps for field sales

**Pricing**
- Free: Up to 3 users
- Standard: ₹900/user/month
- Professional: ₹1,600/user/month
```

## 📂 Categories

- **CRM** - Customer relationship management
- **HR** - Human resources and recruitment
- **Human Resource** - HR software and recruitment
- **Payment Gateway** - Payment processing and merchant services
- **Marketing** - Digital marketing and automation
- **Finance** - Accounting and financial management
- **Finance** - Financial management tools
- **Support** - Customer support and helpdesk
- **Analytics** - Business intelligence and analytics
- **Security** - Cybersecurity and compliance
- **DevTools** - Development and technical tools
- **Accounting** - Accounting and bookkeeping

## 🔍 Writing Reviews

Expand Down Expand Up @@ -114,20 +147,83 @@ npm run linkcheck
npm test
```

### Frontend Development

```bash
# Navigate to frontend directory
cd frontend

# Install dependencies
npm install

# Start development server
npm run dev

# Build for production
npm run build

# The build process will:
# 1. Read all .md files from ../listings/
# 2. Auto-generate slugs from name and category
# 3. Generate static pages for each product
# 4. Output optimized HTML files
```

### File Structure

```
appsutra/
├── listings/ # Product listings organized by category
│ ├── crm/
│ ├── hr/
│ └── ...
├── schema/ # JSON Schema validation
├── scripts/ # Validation and utility scripts
├── .github/ # GitHub templates and workflows
└── docs/ # Documentation
├── listings/ # Product listings (organized by category)
│ ├── hr/ # HR category folder
│ │ └── keka-services.md
│ ├── finance/ # Finance category folder
│ │ └── razorpay.md
│ └── payment-gateway/ # Payment Gateway category folder
│ └── ...
├── frontend/ # Next.js web application
│ ├── src/
│ │ ├── app/ # Next.js App Router pages
│ │ ├── lib/ # Data parsing and utilities
│ │ │ └── listings.ts # Markdown parser & slug generator
│ │ ├── types/ # TypeScript type definitions
│ │ │ └── product.ts # Product type interface
│ │ └── components/ # React components
│ └── public/ # Static assets
├── schema/ # JSON Schema validation
├── scripts/ # Validation and utility scripts
├── .github/ # GitHub templates and workflows
└── docs/ # Documentation
```

### Architecture: Markdown → Static Site

**How listings become web pages:**

1. **Organize by Category**: Place product in category folder
- Example: `listings/finance/razorpay.md`

2. **Define in YAML**: Add YAML front-matter with product details
- `name: "Razorpay"`
- `category: "Finance"` (display name, can differ from folder)

3. **Auto-Generate Slugs**: Validation and build process generate slugs from YAML fields
- `name: "Razorpay"` → `slug: "razorpay"` (validated against filename)
- `category: "Finance"` → `categorySlug: "finance"` (validated against folder)
- **Validation ensures**: filename = slugify(name), folder = slugify(category)

4. **Parse at Build Time**: `gray-matter` parses YAML → Product type object

5. **Generate Static Pages**: Next.js creates HTML at `/finance/razorpay`

6. **Deploy**: Static HTML files served via CDN

**Key Points:**
- ✅ **Folder names** = Organizational structure (can be anything)
- ✅ **YAML category** = Source of truth for categorySlug
- ✅ **YAML name** = Source of truth for product slug
- ✅ No database required, fast static HTML
- ✅ Type-safe with TypeScript

## 🤝 Contributing

We welcome contributions from the community! Please read our [Contributing Guide](CONTRIBUTING.md) for details on:
Expand All @@ -140,10 +236,18 @@ We welcome contributions from the community! Please read our [Contributing Guide
## 📜 Guidelines

### For Vendors
- Keep descriptions factual and neutral
- Include India-specific context where relevant
- Provide accurate pricing in ₹
- Maintain up-to-date information
- **Keep descriptions factual and neutral** - No promotional language
- **Include India-specific context** - ₹ pricing, local integrations
- **Follow field limits**:
- Maximum 8 key features
- Maximum 4 pricing plans
- Maximum 8 buying guide questions
- Maximum 30 keywords
- **Use proper structure** - Follow the Product type interface exactly
- **No manual slugs** - Slugs are auto-generated from name and category
- **File naming**: Filename must match `slugify(name).md`, folder must match `slugify(category)`
- **Required fields**: All fields in Product schema are required, including `updated_at` (YYYY-MM-DD format)
- **Maintain up-to-date information** - Update `updated_at` when making changes

### For Users
- Write constructive, helpful reviews
Expand Down
22 changes: 22 additions & 0 deletions frontend/components.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "tailwind.config.ts",
"css": "src/app/globals.css",
"baseColor": "neutral",
"cssVariables": true,
"prefix": ""
},
"iconLibrary": "lucide",
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
},
"registries": {}
}
24 changes: 16 additions & 8 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,32 @@
"lint": "next lint"
},
"dependencies": {
"next": "15.5.3",
"react": "19.0.0",
"react-dom": "19.0.0",
"gray-matter": "^4.0.3",
"@radix-ui/react-scroll-area": "^1.2.10",
"@radix-ui/react-slot": "^1.2.3",
"build": "^0.1.4",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"fuse.js": "^7.0.0",
"gray-matter": "^4.0.3",
"lucide-react": "^0.468.0",
"clsx": "^2.1.1",
"tailwind-merge": "^2.5.4"
"next": "^15.5.5",
"react": "^19.2.0",
"react-dom": "^19.2.0",
"react-icons": "^5.5.0",
"react-markdown": "^10.1.0",
"remark-gfm": "^4.0.1",
"tailwind-merge": "^2.6.0",
"tailwindcss-animate": "^1.0.7"
},
"devDependencies": {
"@types/node": "^22",
"@types/react": "^19",
"@types/react-dom": "^19",
"autoprefixer": "^10",
"eslint": "^9",
"eslint-config-next": "15.5.3",
"postcss": "^8",
"autoprefixer": "^10",
"tailwindcss": "^3.4.1",
"typescript": "^5"
}
}
}
Binary file added frontend/public/icons/KeyFeatures/Calendar.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added frontend/public/icons/KeyFeatures/Dollar.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added frontend/public/icons/KeyFeatures/Progress.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added frontend/public/icons/KeyFeatures/Scale.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added frontend/public/icons/pricingOverview/Scale.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added frontend/public/icons/whyChooseUs/Discount.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added frontend/public/icons/whyChooseUs/LightningBolt.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added frontend/public/icons/whyChooseUs/compare.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added frontend/public/ribbon-badge.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading