Powerful Tools for Complete Customization
Simplica.io provides a comprehensive developer toolkit including custom hooks, background jobs, data migration tools, and custom tables — all designed for per-tenant customization at scale.
Custom Data Transformation Hooks
SyncHooks allow each tenant to customize how data flows through the system. Write C# code that transforms data during synchronization — perfect for custom commission logic, product mapping, and customer enrichment.
Available Hook Types
- BeforeCommissionCalculation — Custom commission rules
- ShopifyCreateCustomer — Transform Shopify customer data
- ExigoCreateCustomerFromInternal — Map to Exigo format
- BeforeEnrollerAssignment — Custom enroller logic
- BeforeSponsorAssignment — Custom sponsor placement
- OrderCreatedMapping — Transform order data on sync
- ProductMappingHook — Custom product field mapping
// Custom hook: BeforeCommissionCalculation.cs
public class BeforeCommissionCalculation : IDataHook<CommissionInput, CommissionOutput>
{
public async Task<HookResult<CommissionOutput>?> ExecuteAsync(
HookContext<CommissionInput> context)
{
var input = context.SourceData;
// Custom commission logic for this tenant
var rate = input.CustomerType == "VIP" ? 0.15 : 0.10;
var bonus = input.OrderTotal > 1000 ? 50 : 0;
return HookResult<CommissionOutput>.Success(new CommissionOutput
{
CommissionRate = rate,
BonusAmount = bonus,
Notes = "Applied custom VIP rates"
});
}
}How It Works
- 1.Tenant creates hook code in their GitHub repo
- 2.Code is compiled and deployed to gRPC service
- 3.Hooks execute in isolated context during data sync
- 4.Results transform data before it reaches destination
// Custom job: DailyInventorySync.cs
[Job(
Name = "DailyInventorySync",
Description = "Syncs inventory levels with Shopify",
Platform = "shopify",
ScheduleType = JobScheduleType.Recurring,
CronExpression = "0 2 * * *", // 2 AM daily
Timeout = "00:30:00"
)]
public class DailyInventorySync : ITenantJob
{
public async Task<JobResult> ExecuteAsync(
JobContext context,
CancellationToken ct)
{
var db = context.GetDatabaseService();
var logger = context.Logger;
// Fetch products needing sync
var products = await db.QueryAsync<Product>(
"SELECT * FROM Products WHERE NeedsSync = true");
foreach (var product in products)
{
await SyncToShopify(product);
await context.ReportProgressAsync(++processed, total);
}
return JobResult.Success(new { Synced = processed });
}
}Custom Background Job Execution
Define custom background jobs per tenant with full control over scheduling, execution, and monitoring. Perfect for inventory syncs, report generation, commission calculations, and data cleanup tasks.
Job Capabilities
- Cron-based scheduling (daily, weekly, monthly, custom)
- On-demand execution via REST API or admin UI
- Real-time progress reporting and monitoring
- Checkpoint-based resume after failures
- Platform-specific jobs (Shopify, Exigo, etc.)
- Per-store execution for multi-store tenants
- Configurable timeouts and retry policies
- Email/Slack notifications on failure
Seamless Platform Migrations
Our powerful migration engine makes switching platforms painless. Import customers, orders, products, and more from any supported source with intelligent matching, conflict resolution, and complete audit trails.
Bi-Directional Sync
Import data from external systems or export to third parties. Support for live API, staging tables, and file imports.
Conflict Resolution
Intelligent matching by email, external ID, or custom fields. Configurable create/update/skip policies per entity type.
Workflow Control
Full control over post-migration workflows. Skip webhooks, disable triggers, or run full processing pipeline.
Supported Source Systems
Migration Modes
// Migration configuration example
{
"name": "Exigo to Simplica.io Migration",
"direction": "Import",
"source": {
"integrationId": "exigo",
"dataSource": { "type": "LiveApi" }
},
"entities": [
{
"entityType": "Customer",
"priority": 1,
"resolution": {
"strategy": "MatchByEmail",
"fallbackStrategy": "Create"
},
"options": {
"createNew": true,
"updateExisting": true
}
},
{
"entityType": "Order",
"priority": 2,
"resolution": {
"strategy": "MatchByExternalId"
}
}
],
"execution": {
"mode": "Full",
"batchSize": 100,
"parallelism": 4
},
"workflowControl": {
"triggerOrderWorkflows": false,
"skipWebhooks": true
}
}Extend Your Data Model
Create custom database tables directly from the admin UI. Perfect for storing tenant-specific data that doesn't fit the standard schema — integration mappings, custom metrics, staging data for migrations, and more.
Use Cases
- Cross-platform ID mapping tables
- Custom metrics and KPI tracking
- Staging tables for data migrations
- Integration-specific configuration storage
- Audit logs and history tracking
- Custom reporting data aggregations
- Temporary data processing buffers
Access from Hooks & Jobs
Custom tables are fully accessible from SyncHooks and Tenant Jobs via theICustomTableDatabaseServiceinterface. Query, insert, update, and delete records with full LINQ support.
Create and manage custom database tables from the admin UI
Custom Tables Management
Developer Tooling
Complete CLI and development tools for efficient local development and deployment.
Simplica CLI
Full-featured CLI for local development, database migrations, tenant management, and deployment automation.
Local Development
Run the complete stack locally with Docker Compose. Hot reload for hooks and jobs during development.
API-First Design
Complete REST API with OpenAPI documentation. Every feature accessible programmatically.
Kubernetes Native
Production-ready Kubernetes manifests. Horizontal scaling, rolling deployments, and health checks.
Debugging Tools
Built-in logging, tracing, and debugging. View hook execution logs and job progress in real-time.
Plugin Architecture
Modular plugin system for hooks and jobs. Share common code across multiple tenants.
Built for Enterprise Scale
The Simplica.io platform is designed to handle complex multi-tenant scenarios with the flexibility developers need and the reliability enterprises demand.