أمين الصندوق / المبيعات
تشغيل البيع اليومي على الطاولة بإيقاع سريع وواجهة هادئة.
- إصدار الفواتير وتحصيل المدفوعات
- بحث سريع عن الدواء وإضافته إلى السلة
pharmacy-desktop is a modern, fully functional desktop pharmacy management application built with Electron.js, HTML, CSS (Tailwind CSS or custom CSS), and JavaScript/React. It is an Arabic-first application with full RTL layout support (dir="rtl"), designed for daily use by pharmacy staff in Arabic-speaking markets.
The product intent is to give a pharmacy a single, calm, trustworthy desktop instrument for the work that happens behind the counter: tracking drug stock, ringing up sales and printing invoices, keeping supplier records, watching expiry and low-stock risk, and reviewing sales performance. The interface is explicitly Apple-inspired — translucent glassmorphism surfaces, squircle corners (16px–24px), soft drop shadows, and smooth micro-interactions — over a professional medical palette of soft emerald green and ocean blue on clean white/light-gray backgrounds.
The audience is the pharmacy team: counter staff who run sales, inventory staff who keep shelves stocked and safe, and the owner/manager who reviews performance. All three share one desktop application and one set of durable pharmacy records.
pharmacy-desktop is delivered as an Electron.js desktop application. The renderer presents an Arabic RTL shell with a collapsible sidebar and six working destinations — Dashboard, Inventory / Drug Stock, Point of Sale / POS, Supplier Management, Expiry & Low-Stock Alerts, and Reports & Sales History — plus an anonymous Landing entry and application-owned identity surfaces (Login, Sign Up). Durable pharmacy records (drug stock, sales, suppliers, alerts, reports) are owned by the application and persisted in a MariaDB database through a shared FastAPI backend process; the React frontend renders the UI and calls that backend.
Actors are the three accepted human personas — Pharmacy Cashier / Sales Staff, Pharmacy Inventory Manager, and Pharmacy Owner / Manager — each with distinct responsibilities across the shared records. Access to the six working destinations requires login; the Landing, Login, and Sign Up surfaces are anonymously reachable so that identity can be established before protected work begins.
Current delivery covers the six source-named destinations, the dashboard stat cards, the POS search/cart/discount/print workflow, and the Electron setup files (main.js, index.html, styles.css). The application does not include adjacent pharmacy capabilities beyond what the source names.
Removed from scope
pharmacy-desktop is a first-party desktop application. The application owns its identity: a pharmacy staff member establishes an account on first use through Sign Up, and returning staff verify themselves on Login before reaching any of the six working destinations. The Landing surface is anonymous and explains the application before identity is established; it does not expose protected pharmacy records.
All six working destinations — Dashboard, Inventory / Drug Stock, Point of Sale / POS, Supplier Management, Expiry & Low-Stock Alerts, and Reports & Sales History — are protected and require login. There is no differentiated permission model established by the source: the three personas share the same application and the same durable records, and each persona's distinct work is expressed through which destinations they use and what they do there, not through role-based visibility rules.
The current horizon is the desktop application as described. No future-horizon capabilities are accepted in this document.
FR-1 — Desktop application delivery (explicit) As a pharmacy staff member, I should use pharmacy-desktop as a desktop application built with Electron.js using HTML, CSS (Tailwind CSS or custom CSS), and JavaScript/React, so that the pharmacy's daily work runs in a native-feeling desktop window.
main.js, index.html, and styles.css.FR-2 — Arabic RTL interface (explicit)
As an Arabic-speaking pharmacy staff member, I should see the entire interface in Arabic with full RTL layout support (dir="rtl"), so that reading order, navigation, and tables match my language.
dir="rtl"; no LTR-only layout artifacts appear in navigation or tables.FR-3 — Arabic typography (explicit) As a pharmacy staff member, I should read the interface in a clean, elegant, highly legible modern Arabic font (such as Cairo, Tajawal, or IBM Plex Sans Arabic), so that long shifts remain comfortable to read.
FR-4 — Medical emerald/ocean palette (explicit) As a pharmacy staff member, I should see a professional medical theme of soft emerald green and ocean blue on clean white/light-gray backgrounds, so that the application feels trustworthy and clinical without being cold.
FR-5 — Apple-inspired surface language (explicit) As a pharmacy staff member, I should experience an Apple-inspired design language with rounded corners (16px–24px squircles), subtle drop shadows, translucent glassmorphism effects, and smooth micro-interactions/transitions, so that the tool feels modern and pleasant to touch.
FR-6 — Collapsible sidebar navigation (explicit) As a pharmacy staff member, I should navigate through a collapsible sidebar with Apple-style rounded icons giving quick access to Dashboard, Inventory / Drug Stock, Point of Sale / POS, Supplier Management, Expiry & Low-Stock Alerts, and Reports & Sales History, so that I can reach any working area in one click.
FR-7 — Dashboard stat cards (explicit) As a Pharmacy Owner / Manager, I should see rounded stat cards on the Dashboard showing daily sales, expiring medicines, low stock counts, and total inventory value, so that I get an at-a-glance picture of the pharmacy.
FR-8 — POS medicine quick search (explicit) As a Pharmacy Cashier / Sales Staff, I should quickly search for medicines in the POS, so that I can find the right product at the counter without delay.
FR-9 — POS cart addition (explicit) As a Pharmacy Cashier / Sales Staff, I should add medicines to the cart easily, so that a sale can be assembled quickly.
FR-10 — POS discount calculation (explicit) As a Pharmacy Cashier / Sales Staff, I should calculate a discount on the sale, so that the customer is charged the correct discounted total.
FR-11 — POS invoice printing (explicit) As a Pharmacy Cashier / Sales Staff, I should print the invoice from the POS, so that the customer receives a receipt and the sale is recorded.
FR-12 — Inventory / drug stock management (explicit) As a Pharmacy Inventory Manager, I should manage drug stock records in Inventory / Drug Stock (إدارة الأدوية والمخزون), so that the pharmacy's medicine register stays accurate.
FR-13 — Supplier management (explicit) As a Pharmacy Inventory Manager, I should manage supplier records in Supplier Management (إدارة الموردين), so that supplier information stays current.
FR-14 — Expiry and low-stock alerts (explicit) As a Pharmacy Inventory Manager, I should view expiry and low-stock alerts in Expiry & Low-Stock Alerts (تنبيهات الصلاحية والنقص), so that I can act before medicines expire or shelves run out.
FR-15 — Reports and sales history (explicit) As a Pharmacy Owner / Manager, I should review reports and sales history in Reports & Sales History (التقارير والمبيعات), so that I can track pharmacy performance.
FR-16 — Smooth transitions and fluid animations (explicit) As a pharmacy staff member, I should experience smooth state transitions and fluid UI animations, so that the application feels responsive and polished.
cubic-bezier(0.32, 0.72, 0, 1); route changes cross-fade with a 40ms stagger on cards; all motion collapses to instant state changes under prefers-reduced-motion.FR-17 — Desktop-responsive layout (explicit) As a pharmacy staff member, I should use a layout that is fully responsive and optimized for desktop screen sizes, so that the application uses the available window well.
FR-18 — First-use enrollment (required_inference) As a pharmacy staff member using pharmacy-desktop for the first time, I should establish an account on Sign Up, so that my work is bound to a durable identity.
FR-19 — Returning verification (required_inference) As a returning pharmacy staff member, I should verify my identity on Login before reaching protected pharmacy records, so that durable sales, inventory, supplier, and reporting records stay protected.
FR-20 — Anonymous landing entry (required_inference) As a prospective pharmacy staff member, I should see an anonymous Landing that explains the application and its core capabilities, so that I understand what it does before establishing identity.
prefers-reduced-motion, all transitions become instant.Muse and headline: Michal Malewicz — "Layered emerald-and-ocean glass, laid out in Arabic." The register is explicitly Apple-inspired: translucent frosted surfaces, squircle corners, emerald and ocean blue on white, reading as a trustworthy modern medical instrument rather than austere enterprise.
Palette (light mode):
#F2F6F7#FFFFFF#0F2A2E#0E9F76#1C7FD6#5C7378Frosted panels sit at 72–85% white opacity over soft emerald-to-ocean gradient fields. Emerald is the only action colour (POS pay button, primary CTA, active sidebar item, positive deltas); ocean blue is the data colour (chart strokes, links, informational badges, secondary icon fills) and is never used for destructive actions. Ink #0F2A2E for body and headings (contrast > 12:1 on white); #5C7378 for labels and metadata. Surface mix: roughly 62% white/light-grey, 20% emerald tints, 12% ocean tints, 6% ink type.
Typography:
letter-spacing: 0 (never negative on Arabic script).clamp(2.5rem, 4vw, 3.5rem); page title 28→36px; section title 20→24px; card metric 32→44px tabular; body 15→16px; label 12→13px with 0.02em tracking. Line-height 1.6 for Arabic body, 1.25 for headings.Shape language: Squircle-first — cards and panels at 24px radius, controls and inputs at 16px, pills at 999px for filter chips and status tags. Every glass panel carries a 1px inner light border rgba(255,255,255,0.65) plus a soft two-layer shadow (0 1px 2px rgba(15,42,46,0.06), 0 12px 32px rgba(15,42,46,0.08)). Icons sit in rounded-square 40px tiles with 12px radius. No sharp corners except table row dividers, which are 1px hairlines at rgba(15,42,46,0.08).
Spacing rhythm: Generous panel padding with a consistent 8px base unit; the dashboard uses a 12-column grid with four stat squircles in a row, reflowing to 2×2 at 768px and stacked at 375px, then an 8/4 split of revenue chart and expiry list.
Imagery style: No stock photography of people. Visual interest comes from the interface itself — frosted gradient fields behind panels, soft emerald/ocean mesh blooms at low opacity in the header and sidebar foot, thin-line medical pictograms (capsule, blister pack, thermometer, truck) at 1.5px stroke in rounded tiles, and a fine dotted-grid texture at 4% opacity on the page ground. Charts are the hero imagery: smooth area charts in ocean blue with emerald gradient fills.
The first screen after login is the Dashboard, not a marketing hero: a full-width frosted header band (24px radius, 85% white over an emerald-to-ocean mesh bloom drifting slowly) holding the pharmacy name in IBM Plex Sans Arabic 36px on the RTL right, today's date, and a live "الصندوق مفتوح" status pill with a gently pulsing emerald dot. Directly beneath, a single row of four oversized squircle stat cards — daily sales in 44px tabular numerals with a small emerald sparkline, expiring medicines, low stock, total inventory value — each floating on its own soft shadow with a 40px rounded icon tile in the corner. No centred headline, no gradient blob button, no stock photo: the composition is a working instrument panel with one dominant colour field and calm white surfaces.
The signature moves that carry the identity across the app:
Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: layered_2d
Landing Hero Motion Brief
cubic-bezier(0.32, 0.72, 0, 1) transitions on hover, focus, and panel swaps; sidebar collapse animates width with labels fading and sliding; cart line items spring in with a 4px lift; a slow 12s gradient drift behind the dashboard header; route changes cross-fade content with a 40ms stagger on cards.dir="rtl"). Rationale: the source names Arabic as the product language and requires RTL.prefers-reduced-motion to instant state changes with no drift or count-up. Rationale: explicit smooth-animation requirement paired with the direction's accessibility rule.main.js, index.html, and styles.css (explicit).dir="rtl").
أداة سطح مكتب واحدة للصيدلية اليومية: إدارة الأدوية والمخزون، وإصدار فواتير البيع من نقطة البيع، ومتابعة الموردين، والتنبيه قبل انتهاء الصلاحية أو نقص الكميات، والاطلاع على التقارير والمبيعات — في واجهة عربية هادئة وواضحة.
تشغيل البيع اليومي على الطاولة بإيقاع سريع وواجهة هادئة.
إبقاء الرفوف مكتملة وآمنة دون متابعة يدوية للدفاتر.
نظرة واحدة على أداء الصيدلية دون تجميع الأرقام يدوياً.
إن كانت هذه أول مرة لك في النظام، أنشئ حساباً جديداً — وإن كنت من فريق الصيدلية العائد فسجّل الدخول للمتابعة إلى مساحة العمل.

أداة سطح مكتب واحدة للصيدلية اليومية: إدارة الأدوية والمخزون، وإصدار فواتير البيع من نقطة البيع، ومتابعة الموردين، والتنبيه قبل انتهاء الصلاحية أو نقص الكميات، والاطلاع على التقارير والمبيعات — في واجهة عربية هادئة وواضحة.
تشغيل البيع اليومي على الطاولة بإيقاع سريع وواجهة هادئة.
إبقاء الرفوف مكتملة وآمنة دون متابعة يدوية للدفاتر.
نظرة واحدة على أداء الصيدلية دون تجميع الأرقام يدوياً.
إن كانت هذه أول مرة لك في النظام، أنشئ حساباً جديداً — وإن كنت من فريق الصيدلية العائد فسجّل الدخول للمتابعة إلى مساحة العمل.
No comments yet. Be the first!