# jajapablio/sofen2-app architecture

> Architecture diagram of the GitHub repository jajapablio/sofen2-app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jajapablio/sofen2-app
- Repository: https://github.com/jajapablio/sofen2-app

## Overview

PredictPOS is a multi-store point-of-sale application for owners, administrators, managers, and cashiers. Staff sign in to role-specific workspaces; cashiers build carts and create simulated payments, while managers oversee store activity and forecasts and administrators manage staff, catalog, and operational settings. Payment APIs validate and confirm test transactions before recording sales. The README documents additional audit, supplier, device, and integration capabilities. Some routes and workspaces were not sampled, so their documented links are identified as such; unsampled implementation details are not assumed.

Main entry points: [`src/app/dashboard/manager/ManagerWorkspace.js`](https://github.com/jajapablio/sofen2-app/blob/master/src/app/dashboard/manager/ManagerWorkspace.js) (Manager workspace), [`src/app/api/payments/route.js`](https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/payments/route.js) (Payment creation), [`src/app/dashboard/admin/AdminWorkspace.js`](https://github.com/jajapablio/sofen2-app/blob/master/src/app/dashboard/admin/AdminWorkspace.js) (Admin workspace), [`src/components/AuthContainer.js`](https://github.com/jajapablio/sofen2-app/blob/master/src/components/AuthContainer.js) (Sign-in and signup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and onboarding"]
  node_auth_ui["Sign-in and signup<br/>[AuthContainer.js]"]
  node_login["Login form<br/>[LoginForm.js]"]
  node_signup["Owner signup<br/>[SignupForm.js]"]
  node_owner_api["Owner provisioning<br/>[route.js]"]
end

subgraph group_pos["Point of sale"]
  node_cashier["Cashier workspace"]
  node_payment_api["Payment creation<br/>[route.js]"]
  node_payment_confirm["Payment confirmation<br/>[route.js]"]
  node_qr_sign["QR capability signing<br/>[qr-token.js]"]
  node_guest_pay["Guest QR payment<br/>[route.js]"]
end

subgraph group_management["Store management"]
  node_admin["Admin workspace<br/>[AdminWorkspace.js]"]
  node_employee_form["Employee form<br/>[EmployeeForm.js]"]
  node_employee_api["Staff administration<br/>[route.js]"]
  node_manager["Manager workspace"]
  node_cashier_actions["Refunds and voids<br/>[route.js]"]
end

subgraph group_insights["Forecasts and reporting"]
  node_forecast_view["Forecast display<br/>[ForecastEngine.js]"]
  node_revenue_view["Revenue trend<br/>[RevenueTrend.js]"]
  node_forecast_db["Forecast generation"]
end

subgraph group_services["Server and persistence"]
  node_supabase_client["Supabase client<br/>[client.js]"]
  node_supabase_admin["Privileged Supabase client<br/>[admin.js]"]
  node_payment_auth["Payment request auth<br/>[server.js]"]
  node_payment_ledger[("Simulated payment ledger")]
end

node_staff(("Store staff"))
node_supabase[("Supabase")]

node_staff -->|"opens"| node_auth_ui
node_auth_ui -.->|"renders"| node_login
node_auth_ui -.->|"renders"| node_signup
node_signup -.->|"registers"| node_owner_api
node_owner_api -->|"provisions with"| node_supabase_admin
node_cashier -.->|"creates payment"| node_payment_api
node_payment_api -->|"authenticates via"| node_payment_auth
node_payment_api -->|"signs QR token"| node_qr_sign
node_payment_api -->|"creates snapshot"| node_payment_ledger
node_cashier -.->|"confirms payment"| node_payment_confirm
node_payment_confirm -->|"authenticates via"| node_payment_auth
node_payment_confirm -->|"confirms atomically"| node_payment_ledger
node_guest_pay -.->|"verifies token"| node_qr_sign
node_guest_pay -.->|"confirms guest payment"| node_payment_ledger
node_admin -->|"renders"| node_employee_form
node_admin -.->|"manages staff"| node_employee_api
node_admin -->|"reads and writes"| node_supabase_client
node_manager -->|"reads store data"| node_supabase_client
node_manager -->|"renders"| node_forecast_view
node_manager -->|"renders"| node_revenue_view
node_manager -.->|"requests refresh"| node_forecast_db
node_cashier_actions -.->|"updates sale records"| node_supabase
node_supabase_client -->|"connects"| node_supabase
node_supabase_admin -.->|"connects"| node_supabase
node_forecast_db -->|"generates forecasts"| node_supabase

click node_auth_ui "https://github.com/jajapablio/sofen2-app/blob/master/src/components/AuthContainer.js"
click node_login "https://github.com/jajapablio/sofen2-app/blob/master/src/components/LoginForm.js"
click node_signup "https://github.com/jajapablio/sofen2-app/blob/master/src/components/SignupForm.js"
click node_owner_api "https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/auth/register-owner/route.js"
click node_cashier "https://github.com/jajapablio/sofen2-app/blob/master/src/app/dashboard/CashierConnectedWorkspace.js"
click node_payment_api "https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/payments/route.js"
click node_payment_confirm "https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/payments/%5BpaymentId%5D/confirm/route.js"
click node_qr_sign "https://github.com/jajapablio/sofen2-app/blob/master/src/lib/payments/qr-token.js"
click node_guest_pay "https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/qr-payments/%5BpaymentId%5D/route.js"
click node_admin "https://github.com/jajapablio/sofen2-app/blob/master/src/app/dashboard/admin/AdminWorkspace.js"
click node_employee_form "https://github.com/jajapablio/sofen2-app/blob/master/src/app/dashboard/manager/EmployeeForm.js"
click node_employee_api "https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/admin/employees/route.js"
click node_manager "https://github.com/jajapablio/sofen2-app/blob/master/src/app/dashboard/manager/ManagerWorkspace.js"
click node_cashier_actions "https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/cashier/refund-sale/route.js"
click node_forecast_view "https://github.com/jajapablio/sofen2-app/blob/master/src/components/ForecastEngine.js"
click node_revenue_view "https://github.com/jajapablio/sofen2-app/blob/master/src/components/RevenueTrend.js"
click node_forecast_db "https://github.com/jajapablio/sofen2-app/blob/master/supabase/forecast_engine.sql"
click node_supabase_client "https://github.com/jajapablio/sofen2-app/blob/master/src/lib/supabase/client.js"
click node_supabase_admin "https://github.com/jajapablio/sofen2-app/blob/master/src/lib/supabase/admin.js"
click node_payment_auth "https://github.com/jajapablio/sofen2-app/blob/master/src/lib/payments/server.js"
click node_payment_ledger "https://github.com/jajapablio/sofen2-app/blob/master/supabase/payment_simulator.sql"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_auth_ui,node_login,node_signup,node_owner_api toneBlue
class node_cashier,node_payment_api,node_payment_confirm,node_qr_sign,node_guest_pay,node_supabase toneAmber
class node_admin,node_employee_form,node_employee_api,node_manager,node_cashier_actions toneMint
class node_forecast_view,node_revenue_view,node_forecast_db toneRose
class node_supabase_client,node_supabase_admin,node_payment_auth,node_payment_ledger,node_staff toneIndigo
```

## Components

### Access and onboarding

- [Sign-in and signup](https://github.com/jajapablio/sofen2-app/blob/master/src/components/AuthContainer.js): `src/components/AuthContainer.js`
- [Login form](https://github.com/jajapablio/sofen2-app/blob/master/src/components/LoginForm.js): `src/components/LoginForm.js`
- [Owner signup](https://github.com/jajapablio/sofen2-app/blob/master/src/components/SignupForm.js): `src/components/SignupForm.js`
- [Owner provisioning](https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/auth/register-owner/route.js): `src/app/api/auth/register-owner/route.js`

### Point of sale

- [Cashier workspace](https://github.com/jajapablio/sofen2-app/blob/master/src/app/dashboard/CashierConnectedWorkspace.js): `src/app/dashboard/CashierConnectedWorkspace.js`
- [Payment creation](https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/payments/route.js): `src/app/api/payments/route.js`
- [Payment confirmation](https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/payments/%5BpaymentId%5D/confirm/route.js): `src/app/api/payments/[paymentId]/confirm/route.js`
- [QR capability signing](https://github.com/jajapablio/sofen2-app/blob/master/src/lib/payments/qr-token.js): `src/lib/payments/qr-token.js`
- [Guest QR payment](https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/qr-payments/%5BpaymentId%5D/route.js): `src/app/api/qr-payments/[paymentId]/route.js`

### Store management

- [Admin workspace](https://github.com/jajapablio/sofen2-app/blob/master/src/app/dashboard/admin/AdminWorkspace.js): `src/app/dashboard/admin/AdminWorkspace.js`
- [Employee form](https://github.com/jajapablio/sofen2-app/blob/master/src/app/dashboard/manager/EmployeeForm.js): `src/app/dashboard/manager/EmployeeForm.js`
- [Staff administration](https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/admin/employees/route.js): `src/app/api/admin/employees/route.js`
- [Manager workspace](https://github.com/jajapablio/sofen2-app/blob/master/src/app/dashboard/manager/ManagerWorkspace.js): `src/app/dashboard/manager/ManagerWorkspace.js`
- [Refunds and voids](https://github.com/jajapablio/sofen2-app/blob/master/src/app/api/cashier/refund-sale/route.js): `src/app/api/cashier/refund-sale/route.js`

### Forecasts and reporting

- [Forecast display](https://github.com/jajapablio/sofen2-app/blob/master/src/components/ForecastEngine.js): `src/components/ForecastEngine.js`
- [Revenue trend](https://github.com/jajapablio/sofen2-app/blob/master/src/components/RevenueTrend.js): `src/components/RevenueTrend.js`
- [Forecast generation](https://github.com/jajapablio/sofen2-app/blob/master/supabase/forecast_engine.sql): `supabase/forecast_engine.sql`

### Server and persistence

- [Supabase client](https://github.com/jajapablio/sofen2-app/blob/master/src/lib/supabase/client.js): `src/lib/supabase/client.js`
- [Privileged Supabase client](https://github.com/jajapablio/sofen2-app/blob/master/src/lib/supabase/admin.js): `src/lib/supabase/admin.js`
- [Payment request auth](https://github.com/jajapablio/sofen2-app/blob/master/src/lib/payments/server.js): `src/lib/payments/server.js`
- [Simulated payment ledger](https://github.com/jajapablio/sofen2-app/blob/master/supabase/payment_simulator.sql): `supabase/payment_simulator.sql`

### Other components

- **Store staff**
- **Supabase**

## Connections

- Store staff → Sign-in and signup: opens
- Sign-in and signup → Login form: renders
- Sign-in and signup → Owner signup: renders
- Owner signup → Owner provisioning: registers (evidence: `README.md`)
- Owner provisioning → Privileged Supabase client: provisions with (evidence: `src/app/api/auth/register-owner/route.js`)
- Cashier workspace → Payment creation: creates payment (evidence: `README.md`)
- Payment creation → Payment request auth: authenticates via (evidence: `src/app/api/payments/route.js`)
- Payment creation → QR capability signing: signs QR token (evidence: `src/app/api/payments/route.js`)
- Payment creation → Simulated payment ledger: creates snapshot (evidence: `src/app/api/payments/route.js`)
- Cashier workspace → Payment confirmation: confirms payment (evidence: `README.md`)
- Payment confirmation → Payment request auth: authenticates via (evidence: `src/app/api/payments/[paymentId]/confirm/route.js`)
- Payment confirmation → Simulated payment ledger: confirms atomically (evidence: `src/app/api/payments/[paymentId]/confirm/route.js`)
- Guest QR payment → QR capability signing: verifies token (evidence: `README.md`)
- Guest QR payment → Simulated payment ledger: confirms guest payment (evidence: `README.md`)
- Admin workspace → Employee form: renders (evidence: `src/app/dashboard/admin/AdminWorkspace.js`)
- Admin workspace → Staff administration: manages staff (evidence: `README.md`)
- Admin workspace → Supabase client: reads and writes (evidence: `src/app/dashboard/admin/AdminWorkspace.js`)
- Manager workspace → Supabase client: reads store data (evidence: `src/app/dashboard/manager/ManagerWorkspace.js`)
- Manager workspace → Forecast display: renders (evidence: `src/app/dashboard/manager/ManagerWorkspace.js`)
- Manager workspace → Revenue trend: renders (evidence: `src/app/dashboard/manager/ManagerWorkspace.js`)
- Manager workspace → Forecast generation: requests refresh (evidence: `README.md`)
- Refunds and voids → Supabase: updates sale records (evidence: `README.md`)
- Supabase client → Supabase: connects (evidence: `src/lib/supabase/client.js`)
- Privileged Supabase client → Supabase: connects
- Forecast generation → Supabase: generates forecasts (evidence: `README.md`)
