soroush.asadi eb165db182
CI/CD / CI · API (dotnet build + test) (push) Successful in 1m0s
CI/CD / CI · Admin API (dotnet build) (push) Successful in 38s
CI/CD / CI · Dashboard (tsc) (push) Successful in 1m5s
CI/CD / CI · Admin Web (tsc) (push) Successful in 36s
CI/CD / CI · Website (tsc) (push) Successful in 44s
CI/CD / CI · Koja (tsc) (push) Successful in 49s
CI/CD / Deploy · all services (push) Successful in 3m11s
feat(offline): make every dashboard write durable offline (P2–P5)
Builds on the outbox engine to take the whole dashboard offline in one place
instead of wiring 114 mutation sites individually.

Frontend (single chokepoint = the API client):
- offline-write: any write auto-queues to the outbox on offline/network failure
  and returns an optimistic value; the online path is unchanged apart from an
  Idempotency-Key header (so even online retries de-dup). entityType is derived
  from the URL; POSTs get a remappable local id.
- client.doWrite unifies POST/PUT/PATCH/DELETE through this path. WriteOptions
  gains `offline: "queue" | "reject" | "manual"`.
- Guardrails: auth / billing / payments / SMS / exports are online-only and throw
  OFFLINE_UNAVAILABLE offline rather than queueing (no queued double-charges or
  surprise SMS blasts). use-api-error resolves the friendly localized message
  (fa/en/ar).
- submit-order opts out ("manual") to keep its richer local-Order mock; shared
  helpers de-duplicated into offline-write.
- Request persistent storage on mount so unsynced writes survive eviction.

Backend:
- IdempotencyCleanupJob: daily purge of idempotency records older than 7 days
  (the table now gets a row per keyed write). Registered in Hangfire. No migration.

86 API tests pass; dashboard tsc + build clean.
2026-06-02 18:34:54 +03:30
2026-05-31 13:01:38 +03:30
2026-05-31 11:06:24 +03:30
2026-05-31 11:31:05 +03:30
2026-05-31 11:06:24 +03:30
2026-05-31 11:06:24 +03:30
2026-05-31 11:06:24 +03:30
2026-05-31 11:06:24 +03:30
2026-05-28 20:43:35 +03:30

Meezi — Day 1 Quick Start

Step 1 — Copy these 4 files to your project root

.cursorrules ← AI rules for Cursor MEEZI_CURSOR_GUIDE.md ← Full development guide docker-compose.yml ← Local DB + Redis README.md ← This file

Step 2 — Start local services

docker-compose up -d

Step 3 — Create project structure

mkdir meezi && cd meezi git init

mkdir src web mobile cd src dotnet new sln -n Meezi dotnet new webapi -n Meezi.API --use-controllers dotnet new classlib -n Meezi.Core dotnet new classlib -n Meezi.Infrastructure dotnet new classlib -n Meezi.Shared dotnet sln add Meezi.API Meezi.Core Meezi.Infrastructure Meezi.Shared

cd ../web npx create-next-app@latest dashboard --typescript --tailwind --app

cd ../mobile flutter create meezi_app --org ir.meezi

Step 4 — Open in Cursor

cursor . (from the meezi/ root folder)

Step 5 — Paste this FIRST prompt in Cursor chat (Cmd+L)

Read .cursorrules and MEEZI_CURSOR_GUIDE.md completely. Then do Sprint 1 Week 1:

  1. Set up the .NET solution with proper references between projects
  2. Add all NuGet packages listed in the guide to each project
  3. Create the complete EF Core entity schema from the guide
  4. Set up AppDbContext with all DbSets
  5. Create TenantMiddleware and ITenantContext
  6. Set up Program.cs with full middleware pipeline

Cursor Chat Tips

Ask one sprint at a time

"Do Sprint 2: build the POS order APIs (menu, tables, orders)"

Reference specific sections

"Build the CRM endpoint from Step 10 of MEEZI_CURSOR_GUIDE.md"

Debug with context

"The order API returns 403. Check if TenantMiddleware is injecting CafeId correctly"

Generate Flutter screens

"Build the Flutter POS screen from Sprint 2 in the guide. RTL, Farsi, Riverpod state"


Useful Cursor Keyboard Shortcuts

Cmd+L → Open AI chat Cmd+K → Inline AI edit (select code first) Cmd+I → Composer (multi-file edits) Cmd+. → Quick fix / suggestion Tab → Accept autocomplete


Local URLs when running

Backend API: https://localhost:7001 API Swagger: https://localhost:7001/swagger Dashboard: http://localhost:3000 Hangfire UI: https://localhost:7001/hangfire Flutter web: http://localhost:8080

S
Description
No description provided
Readme 8.4 MiB
Languages
C# 47.1%
TypeScript 46.1%
Dart 3.7%
MDX 1.8%
Shell 0.5%
Other 0.6%