Rawaj, is an AI-driven marketing agency platform. This name reflects its core: an automated system that acts like a full-service marketing agency, generating plans, content, visuals, and handling publishing on social media.
See the code
Rawaj is an Arabic-first, multi-tenant, AI-powered social media marketing SaaS. It helps businesses and agencies move from brand setup to campaign strategy, AI-generated content, social publishing, and analytics in one workflow.
Live site: Rawaj
The product is structured around a campaign lifecycle: onboarding a brand, understanding the business and market, generating a marketing strategy, generating post content and visuals, reviewing the output, scheduling to connected social accounts, and tracking performance.
Marketing teams often work across disconnected tools: one system for brand research, another for strategy, another for content creation, another for publishing, another for reporting. Rawaj consolidates that process into a single platform with tenant-aware access, compensation rules, and AI-assisted generation.
The codebase implements that workflow across:
Rawaj is designed for two primary tenant types:
At a high level, a tenant can:
The product centers around a guided campaign flow from onboarding to strategy approval to content generation and scheduling. The workflow is implemented as an AI-assisted campaign process that tracks strategy generation, content review, and scheduling.
The project is oriented around Arabic usage and RTL workflows, with multi-tenant roles and Arabic-first product behavior throughout the UI and business logic.
The backend enforces tenant membership and permission rules server-side. Roles in the product are mapped as:
The frontend also gates actions for UX, but the real boundary is enforced in backend handlers and authorization behaviors.
The platform integrates:
The campaign flow is backed by an AI pipeline that tracks stage execution, retries, progress, artifacts, and approval state.
The actual social publishing layer in the codebase is centered on Meta Graph API for Facebook and Instagram. Users can connect accounts through OAuth and later schedule or publish posts through the platform.
The app supports:
Campaigns can create scheduled posts and manage them through the calendar flows. The backend enforces scheduling constraints and duplicate prevention rules.
Rawaj uses a coin-based spend system layered on subscription plans. The backend contains pricing, plan changes, coin purchase flows, billing history, and plan usage tracking.
The app supports tenant members, invite-based team flows, brand-scoped access, and platform-level administration.
flowchart LR
User --> WebApp[Angular Frontend]
WebApp -->|REST /api/v1| API[ASP.NET Core API]
API --> DB[(SQL Server)]
API --> AI1[Groq]
API --> AI2[Hugging Face]
API --> AI3[Tavily]
API --> META[Meta Graph API]
API --> Cloudinary[Cloudinary]
API --> Stripe[Stripe Checkout]
The primary user journey is:
The campaign flow is implemented as a guided onboarding-to-scheduling process that moves from strategy to content approval before publishing.
| Layer | Technology |
|---|---|
| Frontend | Angular 21, TypeScript, RxJS |
| UI styling | Bootstrap + custom CSS design tokens |
| Animation | GSAP + motion |
| Backend | ASP.NET Core / .NET 10 |
| API layer | ASP.NET Core controllers + MediatR CQRS |
| Validation | FluentValidation |
| Persistence | Entity Framework Core + SQL Server |
| Authentication | JWT + refresh token flow |
| AI text | Groq |
| AI image | Hugging Face |
| Research | Tavily |
| Social OAuth / publishing | Meta Graph API |
| Media storage | Cloudinary |
| Billing | Stripe |
| SMTP (Gmail-based config in appsettings) |
This repository is organized as a layered application with a thin API surface and CQRS-style command/query handlers.
front/server/Rawaj/Rawaj/server/Rawaj/Rawaj.Application/server/Rawaj/Rawaj.Domain/server/Rawaj/Rawaj.Persistence/server/Rawaj/Rawaj.Infrastructure/The backend follows a layered clean-architecture pattern. Controllers are thin and delegate to MediatR requests/handlers. Each feature is organized under a Features/<Module>/<Action>/ structure, with validation and responses handled alongside the command/query.
rawaj/
├── LICENSE
├── README.md
├── front/
│ ├── angular.json
│ ├── package.json
│ ├── public/
│ └── src/
│ ├── app/
│ ├── environments/
│ └── styles/
├── server/
│ └── Rawaj/
│ ├── Rawaj/
│ ├── Rawaj.Application/
│ ├── Rawaj.Application.Tests/
│ ├── Rawaj.Domain/
│ ├── Rawaj.Infrastructure/
│ └── Rawaj.Persistence/
└── .gitignore
git clone <repository-url>
cd rawaj
cd front
npm install
npm run start
The Angular app is configured to run against the backend at:
http://localhost:5046/api/v1cd server/Rawaj
dotnet restore
dotnet run --project Rawaj/Rawaj.csproj
The backend is configured to run with development settings and exposes the API on:
http://localhost:5046https://localhost:7206 (configured in launchSettings.json)The application checks migrations on startup and runs them automatically:
db.Database.Migrate();
The application configuration is stored in the ASP.NET Core configuration files under:
server/Rawaj/Rawaj/appsettings.jsonserver/Rawaj/Rawaj/appsettings.Development.jsonKey sections in the config include:
{
"ConnectionStrings": {
"DefaultConnection": "..."
},
"Jwt": {
"Secret": "...",
"Issuer": "Rawaj.Issuer",
"Audience": "Rawaj.Audience",
"ExpiryMinutes": 60,
"RefreshTokenExpiryDays": 30
},
"Groq": {
"ApiKeys": ["..."],
"Model": "openai/gpt-oss-120b",
"BaseUrl": "https://api.groq.com/openai/v1"
},
"HuggingFace": {
"ApiKeys": ["..."],
"ImageModel": "black-forest-labs/FLUX.1-schnell"
},
"Tavily": {
"ApiKeys": ["..."],
"MaxResults": 5
},
"SocialOAuth": {
"Meta": {
"ClientId": "...",
"ClientSecret": "...",
"ApiVersion": "v25.0"
}
},
"Cloudinary": {
"CloudName": "...",
"ApiKey": "...",
"ApiSecret": "..."
},
"Stripe": {
"SecretKey": "...",
"PublishableKey": "...",
"WebhookSecret": "..."
},
"Frontend": {
"BaseUrl": "http://localhost:4200"
},
"Cors": {
"AllowedOrigins": ["http://localhost:4200"]
}
}
Important notes:
Cors:AllowedOrigins.Frontend:BaseUrl.appsettings*.json; production deployments should replace placeholders with real credentials and rotate any checked-in secrets.cd front
npm install
npm run start
Open:
http://localhost:4200cd server/Rawaj
dotnet restore
dotnet run --project Rawaj/Rawaj.csproj
The API is served on:
http://localhost:5046https://localhost:7206The frontend environment file is:
front/src/environments/environment.tsfront/src/environments/environment.development.tsBoth are configured to point to http://localhost:5046/api/v1.
Rawaj includes multiple AI providers arranged behind application-layer interfaces and policy rules.
| Feature | Provider |
|---|---|
| Text generation | Groq |
| Image generation | Hugging Face |
| Research and competitive analysis | Tavily |
| Campaign strategy pipeline orchestration | Groq + Tavily + Hugging Face |
The AI pipeline is the core of the marketing campaign flow. It tracks runs, stage execution, retries, artifact output, and approval steps as part of the integrated campaign workflow.
The repository implements social account connection and publishing around Meta's Graph API, specifically for Facebook and Instagram.
The relevant controller is:
server/Rawaj/Rawaj/Controllers/SocialAccountsController.csThe app also includes platform-specific OAuth configuration under SocialOAuth in the backend settings.
The repository contains backend tests under:
server/Rawaj/Rawaj.Application.Tests/Run backend tests:
cd server/Rawaj
dotnet test
Run frontend tests:
cd front
npm run test
The project also supports build validation:
cd front
npm run build
cd server/Rawaj
dotnet build Rawaj.slnx
The project is structured for a standard ASP.NET Core + Angular deployment model:
/health and /health/liveThe project configuration includes:
Frontend:BaseUrlCors:AllowedOriginsPublicImageHosting:PublicBaseUrlCloudinary:*Stripe:*These must all be configured correctly for a production deployment.
This repository is licensed under the Rawaj Source-Available License 1.0.
See LICENSE for the full text.
Rawaj is a real working codebase for an AI-led marketing workflow, not a template. The README above reflects the current repository structure and implementation patterns as they exist in the project at this time.
C#
51.6%
TypeScript
22.6%
HTML
13.2%
CSS
12.6%
Rawaj, is an AI-driven marketing agency platform. This name reflects its core: an automated system that acts like a full-service marketing agency, generating plans, content, visuals, and handling publishing on social media.
See the code
Rawaj is an Arabic-first, multi-tenant, AI-powered social media marketing SaaS. It helps businesses and agencies move from brand setup to campaign strategy, AI-generated content, social publishing, and analytics in one workflow.
Live site: Rawaj
The product is structured around a campaign lifecycle: onboarding a brand, understanding the business and market, generating a marketing strategy, generating post content and visuals, reviewing the output, scheduling to connected social accounts, and tracking performance.
Marketing teams often work across disconnected tools: one system for brand research, another for strategy, another for content creation, another for publishing, another for reporting. Rawaj consolidates that process into a single platform with tenant-aware access, compensation rules, and AI-assisted generation.
The codebase implements that workflow across:
Rawaj is designed for two primary tenant types:
At a high level, a tenant can:
The product centers around a guided campaign flow from onboarding to strategy approval to content generation and scheduling. The workflow is implemented as an AI-assisted campaign process that tracks strategy generation, content review, and scheduling.
The project is oriented around Arabic usage and RTL workflows, with multi-tenant roles and Arabic-first product behavior throughout the UI and business logic.
The backend enforces tenant membership and permission rules server-side. Roles in the product are mapped as:
The frontend also gates actions for UX, but the real boundary is enforced in backend handlers and authorization behaviors.
The platform integrates:
The campaign flow is backed by an AI pipeline that tracks stage execution, retries, progress, artifacts, and approval state.
The actual social publishing layer in the codebase is centered on Meta Graph API for Facebook and Instagram. Users can connect accounts through OAuth and later schedule or publish posts through the platform.
The app supports:
Campaigns can create scheduled posts and manage them through the calendar flows. The backend enforces scheduling constraints and duplicate prevention rules.
Rawaj uses a coin-based spend system layered on subscription plans. The backend contains pricing, plan changes, coin purchase flows, billing history, and plan usage tracking.
The app supports tenant members, invite-based team flows, brand-scoped access, and platform-level administration.
flowchart LR
User --> WebApp[Angular Frontend]
WebApp -->|REST /api/v1| API[ASP.NET Core API]
API --> DB[(SQL Server)]
API --> AI1[Groq]
API --> AI2[Hugging Face]
API --> AI3[Tavily]
API --> META[Meta Graph API]
API --> Cloudinary[Cloudinary]
API --> Stripe[Stripe Checkout]
The primary user journey is:
The campaign flow is implemented as a guided onboarding-to-scheduling process that moves from strategy to content approval before publishing.
| Layer | Technology |
|---|---|
| Frontend | Angular 21, TypeScript, RxJS |
| UI styling | Bootstrap + custom CSS design tokens |
| Animation | GSAP + motion |
| Backend | ASP.NET Core / .NET 10 |
| API layer | ASP.NET Core controllers + MediatR CQRS |
| Validation | FluentValidation |
| Persistence | Entity Framework Core + SQL Server |
| Authentication | JWT + refresh token flow |
| AI text | Groq |
| AI image | Hugging Face |
| Research | Tavily |
| Social OAuth / publishing | Meta Graph API |
| Media storage | Cloudinary |
| Billing | Stripe |
| SMTP (Gmail-based config in appsettings) |
This repository is organized as a layered application with a thin API surface and CQRS-style command/query handlers.
front/server/Rawaj/Rawaj/server/Rawaj/Rawaj.Application/server/Rawaj/Rawaj.Domain/server/Rawaj/Rawaj.Persistence/server/Rawaj/Rawaj.Infrastructure/The backend follows a layered clean-architecture pattern. Controllers are thin and delegate to MediatR requests/handlers. Each feature is organized under a Features/<Module>/<Action>/ structure, with validation and responses handled alongside the command/query.
rawaj/
├── LICENSE
├── README.md
├── front/
│ ├── angular.json
│ ├── package.json
│ ├── public/
│ └── src/
│ ├── app/
│ ├── environments/
│ └── styles/
├── server/
│ └── Rawaj/
│ ├── Rawaj/
│ ├── Rawaj.Application/
│ ├── Rawaj.Application.Tests/
│ ├── Rawaj.Domain/
│ ├── Rawaj.Infrastructure/
│ └── Rawaj.Persistence/
└── .gitignore
git clone <repository-url>
cd rawaj
cd front
npm install
npm run start
The Angular app is configured to run against the backend at:
http://localhost:5046/api/v1cd server/Rawaj
dotnet restore
dotnet run --project Rawaj/Rawaj.csproj
The backend is configured to run with development settings and exposes the API on:
http://localhost:5046https://localhost:7206 (configured in launchSettings.json)The application checks migrations on startup and runs them automatically:
db.Database.Migrate();
The application configuration is stored in the ASP.NET Core configuration files under:
server/Rawaj/Rawaj/appsettings.jsonserver/Rawaj/Rawaj/appsettings.Development.jsonKey sections in the config include:
{
"ConnectionStrings": {
"DefaultConnection": "..."
},
"Jwt": {
"Secret": "...",
"Issuer": "Rawaj.Issuer",
"Audience": "Rawaj.Audience",
"ExpiryMinutes": 60,
"RefreshTokenExpiryDays": 30
},
"Groq": {
"ApiKeys": ["..."],
"Model": "openai/gpt-oss-120b",
"BaseUrl": "https://api.groq.com/openai/v1"
},
"HuggingFace": {
"ApiKeys": ["..."],
"ImageModel": "black-forest-labs/FLUX.1-schnell"
},
"Tavily": {
"ApiKeys": ["..."],
"MaxResults": 5
},
"SocialOAuth": {
"Meta": {
"ClientId": "...",
"ClientSecret": "...",
"ApiVersion": "v25.0"
}
},
"Cloudinary": {
"CloudName": "...",
"ApiKey": "...",
"ApiSecret": "..."
},
"Stripe": {
"SecretKey": "...",
"PublishableKey": "...",
"WebhookSecret": "..."
},
"Frontend": {
"BaseUrl": "http://localhost:4200"
},
"Cors": {
"AllowedOrigins": ["http://localhost:4200"]
}
}
Important notes:
Cors:AllowedOrigins.Frontend:BaseUrl.appsettings*.json; production deployments should replace placeholders with real credentials and rotate any checked-in secrets.cd front
npm install
npm run start
Open:
http://localhost:4200cd server/Rawaj
dotnet restore
dotnet run --project Rawaj/Rawaj.csproj
The API is served on:
http://localhost:5046https://localhost:7206The frontend environment file is:
front/src/environments/environment.tsfront/src/environments/environment.development.tsBoth are configured to point to http://localhost:5046/api/v1.
Rawaj includes multiple AI providers arranged behind application-layer interfaces and policy rules.
| Feature | Provider |
|---|---|
| Text generation | Groq |
| Image generation | Hugging Face |
| Research and competitive analysis | Tavily |
| Campaign strategy pipeline orchestration | Groq + Tavily + Hugging Face |
The AI pipeline is the core of the marketing campaign flow. It tracks runs, stage execution, retries, artifact output, and approval steps as part of the integrated campaign workflow.
The repository implements social account connection and publishing around Meta's Graph API, specifically for Facebook and Instagram.
The relevant controller is:
server/Rawaj/Rawaj/Controllers/SocialAccountsController.csThe app also includes platform-specific OAuth configuration under SocialOAuth in the backend settings.
The repository contains backend tests under:
server/Rawaj/Rawaj.Application.Tests/Run backend tests:
cd server/Rawaj
dotnet test
Run frontend tests:
cd front
npm run test
The project also supports build validation:
cd front
npm run build
cd server/Rawaj
dotnet build Rawaj.slnx
The project is structured for a standard ASP.NET Core + Angular deployment model:
/health and /health/liveThe project configuration includes:
Frontend:BaseUrlCors:AllowedOriginsPublicImageHosting:PublicBaseUrlCloudinary:*Stripe:*These must all be configured correctly for a production deployment.
This repository is licensed under the Rawaj Source-Available License 1.0.
See LICENSE for the full text.
Rawaj is a real working codebase for an AI-led marketing workflow, not a template. The README above reflects the current repository structure and implementation patterns as they exist in the project at this time.
C#
51.6%
TypeScript
22.6%
HTML
13.2%
CSS
12.6%