Skip to content
Tehran

Multi-tenant SaaS

ArchPan آرچی‌پنل

Operations software for architecture offices, with an AI assistant built in.

Open live ↗ (opens 45.159.150.193:3100 in a new tab)
Role
Sole developer
Year
2026
Kind
Multi-tenant SaaS
Hosting
Own server, Tehran
Status
75 ms
http:// 45.159.150.193:3100
ArchPan: the live product

Stack

Backend
Django REST Celery
Frontend
React TypeScript
Data & ML
PostgreSQL MinIO
Infrastructure
Docker
Integrations
Claude API

01 The problem

An architecture office juggles project stages, budgets, contractors and quality checks across spreadsheets and chat threads.

The tools that could replace them assume English, left-to-right layouts and the Gregorian calendar — the wrong defaults for an Iranian office. The goal was one product that many offices can use, each seeing only its own data.

02 What I built

Designed, built and run by one developer.

A multi-tenant SaaS for architecture offices: project stages, budget tracking, contractor management, quality control and portfolio publishing, with a Claude-powered assistant built in. Tenants are isolated at the row level, files live in MinIO and background work runs on Celery. Persian right-to-left interface and Jalali calendar throughout.

  1. Project stages, budget tracking, contractor management and quality control in one place.
  2. Portfolio publishing, so finished projects can be shown without a separate site.
  3. A Claude-powered assistant that works inside the product.
  4. Row-level multi-tenancy — every office is a tenant in the same database.
  5. A Persian right-to-left interface with the Jalali calendar throughout.
  6. File storage on self-hosted MinIO and background work on Celery, deployed with Docker.

03 Screens

The live product.

01 / 03

04 Architecture

How ArchPan fits together.

  • Component
  • Worker pool
  • Third party
  • Request
ArchPan’s components, grouped left to right by layer: Client, Edge, App, Workers, Data, External.

Connections

  • Browser (fa · RTL) to Nginx , HTTP
  • Nginx to React + TypeScript , static
  • Nginx to Django REST , /api
  • Django REST to Tenant scoping
  • Tenant scoping to PostgreSQL , tenant rows
  • Django REST to MinIO , files
  • Django REST to Queue broker , enqueue
  • Queue broker to Celery workers , jobs
  • Celery workers to PostgreSQL
  • Celery workers to MinIO
  • Django REST to Claude API , assistant

05 Key decisions

What I chose, why, and what it cost.

  1. Decision

    Row-level tenancy instead of a schema or database per office

    Why

    One schema means one migration path and one database to back up on a single server, and onboarding a new office is a row, not a provisioning step.

    Trade-off

    Every query must be scoped to a tenant, and a missed filter is a data leak. Scoping lives in one central layer so views never do it by hand.

  2. Decision

    Self-hosted MinIO for drawings and documents

    Why

    It speaks the S3 API without depending on foreign cloud providers that are unreliable or unavailable from Iran, and it can be swapped for S3 later without rewriting storage code.

    Trade-off

    Disk, backups and upgrades are mine to run instead of a provider's.

  3. Decision

    Jalali and RTL as first-class, not a translation layer

    Why

    Dates drive stages and budgets, so the calendar is core behaviour. Dates are stored in a standard form and converted at the edges, and every component is built and checked in right-to-left first.

    Trade-off

    Conversion logic exists in both the API and the interface, and third-party UI components often need RTL fixes before they can be used.

06 Try it yourself

ArchPan is running. Go and use it.

Demo login · click to copy

esc
Top of the page
Proof in numbers
Selected work
Also shipped
How I ship
Experience
Stack
Work with me
Pico — case study
ArchPan — case study
Garsha — case study
Fenderesky — case study
MirOffice — case study
Copy email address
Download CV
Open GitHub
Open LinkedIn
Open live demo: Pico
Open live demo: ArchPan
Open live demo: Garsha
Open live demo: Fenderesky
Open live demo: MirOffice