37 Commits
Author SHA1 Message Date
Alireza HassaniandCursor 513673a7da Add Open Graph HTML for public invoice link previews.
WhatsApp and other crawlers can scrape invoice title and image without running the SPA.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 16:15:52 +03:30
Alireza HassaniandCursor d8f4e8c4e5 Support local public invoice URLs with port overrides.
Dev can set INVOICE_PUBLIC_BASE_URL or DEV_PORT/HOST so copied links reach the Vite viewer.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 16:03:33 +03:30
Alireza HassaniandCursor 49a9f0c289 Expose invoice locale on public payloads and accept English name fields on create customer.
Public invoices need branding defaultLocale for RTL viewers; customer create aligns with the business add-customer form.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 15:46:18 +03:30
Alireza HassaniandCursor 73118f38d5 Add finance as an optional business module.
Super-admin can enable Finance per tenant alongside other dashboard modules.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 15:23:53 +03:30
Alireza HassaniandCursor 5734a73c9c Add business-scoped invoices billed to users.
Introduce invoices.user_id, business template/invoice APIs, and tenant-domain public URLs so business dashboards can issue invoices without platform-scope template mismatches.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-11 15:17:03 +03:30
Alireza HassaniandCursor e59db25814 Add business team access controls and customer role filters.
Super-admins can assign Admin; owners/admins manage Editor/Viewer via team/access, and the customers list supports all/customers/managers filtering.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 21:31:28 +03:30
Alireza HassaniandCursor 2c4d02bd0e Normalize AI product HTML for the rich text description editor.
Sanitize model output to an allowlisted fragment and convert plain/markdown fallbacks so description text stays inside the advanced editor.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 20:44:47 +03:30
Alireza HassaniandCursor 23ba6344f6 Switch AI defaults to OpenAI gpt-4.1-nano.
Prefer the cheapest ChatGPT model that supports our JSON completions, and skip custom temperature for gpt-5/o-series models.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 20:33:43 +03:30
Alireza HassaniandCursor 0743063c15 Reactivate inactive users on successful OTP login or password reset.
OTP already proved phone ownership; treating is_active as a hard block made send-otp succeed while login-otp returned a misleading not-registered error.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 10:08:32 +03:30
Alireza HassaniandCursor 0f92307fcd Allow register to link existing Meshkee accounts after acknowledgement.
Adds optional acknowledgeExistingAccount and documents the CELL_EXISTS_OTHER_SITE → SMS link flow for storefronts.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 09:53:15 +03:30
Alireza HassaniandCursor f7cee26975 Track real website deploy success/failure and support master branch.
Deploy agent waits for build completion, writes status, and checks out origin/HEAD (main or master) so empty-main repos like mashinify can deploy.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 08:52:49 +03:30
Alireza HassaniandCursor acc8f35682 Improve cross-site customer signup and login membership.
Same-password register joins silently; mismatched password explains the existing Meshkee account; login/OTP with domain attaches business membership.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 01:02:47 +03:30
Alireza HassaniandCursor 953b87b616 Add public user-products storefront API and website docs.
Expose published customer listings under /tenants/:host/user-products (list, search, details, technical-info) and document them in the website API pack.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 00:19:13 +03:30
Alireza HassaniandCursor 158523df7b Require apex and www TLS for storefront SSL status.
Per-row ensure and SSL refresh treat storefront as valid only when both names match, and toast messages list each host explicitly.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-09 17:57:24 +03:30
Alireza HassaniandCursor a9d5f2e48d Fix storefront SSL probes and per-domain ensure for dashboards.
Skip redundant provision on edit, harden TLS hostname checks, and issue apex/business/customer SSL from one endpoint.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-09 16:32:05 +03:30
Alireza HassaniandCursor 8f05ee2b58 Brand OTP SMS with business name and support local SMS proxy.
Append tenant Farsi name to verification SMS, allow optional domain on send-otp, and add SMS_PROXY_* for local delivery via production. Also include websites SSL sync agent/API wiring.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-08 23:29:56 +03:30
Alireza HassaniandCursor 77f3cb2a67 Add product field AI fill and long-lived media cache headers.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-08 16:35:14 +03:30
Alireza HassaniandCursor b5a54e4174 Allow null price and unlimited stock on store item create/sync.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-08 15:36:41 +03:30
Alireza HassaniandCursor 5cd762c65d Accept HTTPS git repo URLs for storefront provision.
Normalize https://git.meshkee.com/... to SSH for the websites VM deploy key while keeping the URL users paste.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-08 14:25:13 +03:30
Alireza HassaniandCursor 7d123502f8 Allow storefront provision when editing a domain git URL.
Edit Domain can wire deploy_slug the same way as Add Domain so existing businesses get a Deploy button without recreating the domain.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-08 14:18:31 +03:30
Alireza HassaniandCursor d933aef40b Enable storefront provision from Add Domain via optional git URL.
Persist deploy_slug on domains, call the websites agent /provision endpoint, and drop the hard-coded host map so Deploy appears from the UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-08 14:07:56 +03:30
Alireza HassaniandCursor 9ca6e2306f Add per-business modules and home chart slots.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-08 10:40:57 +03:30
Alireza HassaniandCursor 0632f67bda Add brown, navy, dark green, and orange business theme colors.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 18:16:03 +03:30
Alireza HassaniandCursor 08f901306c Add passwordless OTP login and SMS password reset.
Expose login-otp and reset-password so dashboards can finish forgot-password and one-time SMS sign-in, and sync website API docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-05 15:10:06 +03:30
Alireza HassaniandCursor f4295e780c Add partner SMS gateway via Gama SendQuick and document it.
Expose POST /public/sms/send with API key + domain allowlist for external backends like Balout, wire Meshkee OTP/message sends to Gama, and publish Partner SMS docs on /docs/website.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-04 11:09:21 +03:30
Alireza HassaniandCursor 267a218c26 Sync domain SSL status on a 2-hour cron and capture owner FA/EN names.
List pages stay cheap by reading ssl_enabled while Nest probes apex hosts in the background; create-business now stores first/last name in both locales.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-03 09:21:06 +03:30
Alireza HassaniandCursor f233665d13 Add stable keys for special groups and SSL sync agent hooks.
English keys on store/website specials stay unique per business; domain-admin can trigger dashboard SSL sync.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-03 00:06:44 +03:30
Alireza HassaniandCursor 43e3912662 Add defaultLocale, EN names, and dashboard activity endpoints.
Expose branding.defaultLocale, optional user EN name fields, and lightweight dual daily activity for orders/customers; update project context and rules.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-01 09:35:27 +03:30
Alireza HassaniandCursor 4598add88c Ship legacy migrate APIs, portfolio/blog old-id schema, and admin migrate/purge flows.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-29 16:10:41 +03:30
Alireza HassaniandCursor 7244b70e90 Add approved invoice status with lock after customer acceptance.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-28 11:54:16 +03:30
Alireza HassaniandCursor 9455cd9fab Allow creating a business with an existing active owner cell number.
Reuse the existing user as owner instead of rejecting duplicate cells, so one person can own multiple businesses.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-26 14:45:02 +03:30
Alireza HassaniandCursor 723948cd5e Add opaque 12-digit publicId for unguessable invoice links.
Public viewer and URLs use publicId instead of sequential primary keys.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-26 12:00:10 +03:30
Alireza HassaniandCursor 3faeb9bc0d Expand invoices with full templates, public viewer API, and account holder.
Add invoice template CRUD, key points/accounts, public GET endpoint, and migration 039 for account_holder_name.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-26 11:04:26 +03:30
Alireza HassaniandCursor 426316d53c Add platform invoices API with item templates and optional name.
Super admins can manage predefined invoice lines and issue invoices to businesses; schema is ready for future business-scoped use.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 20:59:35 +03:30
Alireza HassaniandCursor 136711dfb3 Document Gitea SSH port 222 for API VM git deploys.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-22 21:49:00 +03:30
Alireza HassaniandCursor 016cc15bf0 Add website API docs, SSL api-hosts, and git-only deploy workflow.
Serve public storefront docs at /docs/website, expose api.{domain} hosts for API SSL sync, and require push-then-pull deploys instead of rsync.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-22 21:39:51 +03:30
Ali Reza bb59d5e9ba Initial commit: Meshkee CMS API
NestJS backend with Prisma, Docker Compose for Postgres/Redis, and deploy docs for the production VM.
2026-07-21 17:52:36 +03:30