Back to portfolio

Case study · Retail operations SaaS

TijaraOS

An in-progress retail-operations platform connecting tenant-aware Django APIs with bilingual Next.js web workflows and a cashier-focused Expo client.

Private product · Public read-only demo with fictional data

Sanitized TijaraOS retail operations dashboard illustrationOpen read-only demo
Role
Full-Stack Developer
Scope
Backend, web, and mobile
Languages
Arabic and English
Status
In progress · public read-only demo

Retail operations organized around one protected workspace boundary.

TijaraOS brings organizations, branches, products, inventory, customers, point-of-sale activity, and reporting into one retail-operations system.

I worked across the relational domain, organization-scoped API access, transaction-sensitive inventory and sales services, protected web workflows, mobile API integration, and release verification.

Full-stack implementation across access, operations, interfaces, and delivery.

01

Tenant-aware backend

Implemented workspace membership, active-organization scope, permission overrides, and server-scoped Django REST Framework APIs.

02

Inventory and sales consistency

Built branch inventory, movements, stocktakes, POS sales, cancellations, receipts, customers, debts, and payment workflows.

03

Web and mobile workflows

Connected protected Next.js routes and a cashier-focused Expo client to shared authentication, permissions, validation, and business rules.

04

Release verification

Added Docker services, GitHub Actions, backend tests and checks, frontend linting, type checks, builds, and browser acceptance coverage.

One server-side trust boundary for web and mobile operations.

The API resolves organization and permission context before application services change PostgreSQL data. Redis supports cache and throttling concerns without becoming the system of record.

Web application

Next.js · TypeScript · same-origin gateway · HttpOnly session

Application boundary

Django 5.2 · DRF · tenant scope · permissions · services

Operational data

PostgreSQL · transactions · row locks · movement history

Mobile application

Expo · cashier workflows · authenticated API client

The data model keeps tenant, branch, stock, and sale relationships explicit.

Organizations define the tenant boundary. Branch inventory records operational stock, inventory movements retain quantity history, and sales preserve their own line items.

OrganizationMembership
BranchBranch inventory
ProductInventory movement
SaleSale item

Configuration, stock, sale, and review share the same access rules.

  1. 01

    Configure

    Create the workspace context, branches, team membership, and effective permissions.

  2. 02

    Stock

    Manage products, branch quantities, movements, and stocktake workflows.

  3. 03

    Sell

    Validate a POS sale, lock relevant stock, and commit sale items and movements together.

  4. 04

    Review

    Inspect receipts, customers, sales history, low stock, and branch-aware summaries.

Critical boundaries are enforced by the server and database.

Server-side tenant isolation

Business queries and mutations use the active organization context instead of trusting a client-supplied organization identifier.

Transactional stock changes

Consistency-sensitive workflows use database transactions and row locking, with inventory movements recording quantity changes.

Browser token isolation

The web gateway keeps JWT credentials in HttpOnly, SameSite cookies and validates origin and CSRF values for unsafe requests.

Release gates

Checks cover backend configuration and tests, migration drift, dependency policy, frontend and mobile verification, and optional browser acceptance.

An implemented, pilot-oriented system with a public read-only demo.

The public demo verifies the bilingual web experience, seeded fictional records, and Viewer-only access while the sanitized evidence documents the private backend, mobile, data, permission, transaction, and delivery boundaries. No customer count, transaction volume, revenue, uptime, or performance result is claimed.

Technology used

  • Python
  • Django
  • Django REST Framework
  • PostgreSQL
  • Redis
  • Next.js
  • TypeScript
  • Tailwind CSS
  • Expo
  • Docker
  • GitHub Actions
  • Playwright

Need a multi-tenant business system with reliable operational workflows?

Let's turn the domain rules into a product teams can verify.

Discuss a projectView more work