Marketplace Overview
The SCRIPE Marketplace — ecosystem of installable apps, categories, developer profiles, and the entity map for all 13 domain entities.
The Marketplace module powers SCRIPE's app ecosystem: developers publish plugins as commercial listings, tenants browse and purchase them, and the platform enforces a multi-stage review pipeline before any app goes live. This page covers the full entity map and the two organizational entities — AppCategory and AppCategoryMapping.
| Marketplace Area | Current Status | Truth Boundary |
|---|---|---|
| Listings, categories, developer profiles, submissions, and reviews | Backend entities and APIs exist | Operationally useful but still needs production hardening |
| Purchases and pricing | Backend model exists | Do not claim complete production commerce without payment and payout verification |
| Developer payouts | Simulated payout handler still exists | Not production-ready settlement |
| Plugin ecosystem | Depends on Plugins module | No claim of arbitrary-code sandboxing |
Key Capabilities
App Publishing
Developers create AppListings that link PluginDefinitions to a storefront presence with name, tagline, screenshots, and pricing.
One-Click Install
Tenants browse the catalog, purchase or trial apps, and trigger plugin installation in a single flow.
Ratings & Reviews
Users submit 1–5 star ratings with review text. Developers can reply once per review. AverageRating is denormalized on AppListing for fast catalog queries.
Flexible Pricing
Six pricing models: Free, PaidOnce, Subscription, Freemium, PerSeat, UsageBased — all configured via AppPricing with trial-day support.
Install Analytics
Daily AppInstallCount snapshots power developer dashboards showing install trends, growth rates, and active install counts.
Submission Review Gate
Every new version goes through automated scan → manual admin review (AppSubmission + AppReviewTask) before it can be published.
Domain Entity Map
The Marketplace module contains 13 domain entities across five functional areas: listings, developer portal, purchases, analytics, and reviews.
| Entity | Base | Purpose |
|---|---|---|
| AppListing | AuditableEntity<Guid> | Central storefront record linking a PluginDefinition to its commercial presence |
| AppCategory | AuditableEntity<Guid> | Bilingual category tag organizing listings (e.g. "Productivity") |
| AppCategoryMapping | AuditableEntity<Guid> | Many-to-many join between AppListing and AppCategory |
| AppScreenshot | AuditableEntity<Guid> | Ordered gallery image for a listing's detail page |
| AppSubmission | AuditableEntity<Guid> | Version submission entering the admin review pipeline |
| AppPricing | AuditableEntity<Guid> | Pricing model, amount, currency, and trial period for a listing |
| AppPurchase | AuditableEntity<Guid> | Transaction record when a tenant buys a paid app |
| AppInstallCount | AuditableEntity<Guid> | Daily install-metric snapshot for analytics dashboards |
| AppReview | AuditableEntity<Guid> | User 1–5 star rating with headline and content body |
| AppReviewReply | AuditableEntity<Guid> | Developer's single reply to a user review |
| AppReviewTask | AuditableEntity<Guid> | Admin task tracking the review pipeline for a submission |
| DeveloperProfile | AuditableEntity<Guid> | Tenant registered as a marketplace publisher |
| DeveloperPayout | AuditableEntity<Guid> | Revenue-sharing payout record per billing period |
AppCategory Entity
Represents a marketplace category used to organize app listings (e.g. "Productivity", "Analytics", "Communication"). Supports bilingual names (EN/AR) and a URL-safe slug for routing.
| Field | Type | Description |
|---|---|---|
| Id | Guid | Primary key |
| NameEn | string | Category name in English |
| NameAr | string | Category name in Arabic |
| Slug | string | URL-safe slug for storefront routes (e.g. "productivity") |
| Icon | string | Icon identifier or CSS class for the category badge |
| Description | string | Short description of what this category covers |
| SortOrder | int | Display order in the category navigation (lower = first) |
AppCategoryMapping Entity
Join entity implementing the many-to-many relationship between AppListing and AppCategory. An app can belong to multiple categories, and a category can contain multiple apps.
| Field | Type | Description |
|---|---|---|
| Id | Guid | Primary key |
| AppListingId | Guid | Foreign key to the app listing |
| AppCategoryId | Guid | Foreign key to the category |
Entity Relationship Overview
The diagram below shows how the 13 Marketplace entities relate. DeveloperProfile is the root — it owns AppListings, which are the hub connecting pricing, submissions, purchases, reviews, screenshots, and analytics.