Files
pos/README.md
2026-03-20 22:50:22 -05:00

160 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# README.md
## Overview
This project is a full-stack TypeScript point-of-sale (POS) system: an Android POS frontend, a Node/Express API backend, and a React admin UI, all packaged in a **single Docker container**.
The backend exposes REST APIs for the Android app and serves the React admin UI for vendor configuration and reporting.
***
## Tech Stack
- Node.js + TypeScript (Express or Fastify)
- React + TypeScript (SPA)
- SQL database (PostgreSQL in production; SQLite acceptable for local/demo)
- Docker (single container for API + admin UI)
***
## Project Structure
Example layout (subject to refinement):
- `server/` Node/TypeScript backend (Express/Fastify, Prisma, migrations)
- `client/` React/TypeScript admin UI
- `android/` Android POS app (separate repo or module)
- `Dockerfile` single-image build for backend + admin
- `docker-compose.yml` optional local DB wiring
- `AGENTS.md`, `INSTRUCTIONS.md`, `ROADMAP.md` agent and project docs
***
## Prerequisites
For local (non-Docker) runs:
- Node.js 20+ installed
- npm or pnpm
- PostgreSQL (or SQLite if configured)
For Docker runs:
- Docker Engine (and optionally Docker Compose)
***
## Environment Variables
Backend expects:
- `PORT` HTTP port (default: 8080)
- `NODE_ENV` `development` or `production`
- `DATABASE_URL` connection string (e.g., Postgres)
- `JWT_SECRET` secret for JWT signing
- `LOG_LEVEL` optional (`info`, `debug`, etc.)
Document any additional env vars you introduce in this section.
***
## Local Development (Without Docker)
Backend:
```bash
# from /server
npm install
npm run dev # or equivalent, e.g. ts-node-dev / nodemon
```
Admin UI:
```bash
# from /client
npm install
npm run dev # Vite/CRA dev server
```
You can either:
- Run React dev server separately and point it at the API (`VITE_API_URL=http://localhost:8080/api`), or
- Configure the backend to serve the built React app in production mode.
***
## Building \& Running with Docker
### 1. Build the Image
From the project root:
```bash
docker build -t vendor-pos:latest .
```
### 2. Run the Container (Simple)
For a quick start with SQLite or an in-container DB:
```bash
docker run --rm -p 8080:8080 \
-e NODE_ENV=production \
-e PORT=8080 \
-e DATABASE_URL=sqlite:./data.db \
-e JWT_SECRET=change-me \
vendor-pos:latest
```
The admin UI will be available at `http://localhost:8080/` and the API at `http://localhost:8080/api/...`.
### 3. Run with Postgres via Docker Compose (Optional)
Example `docker-compose.yml` (to be refined):
```yaml
version: "3.9"
services:
db:
image: postgres:16
environment:
POSTGRES_USER: pos_user
POSTGRES_PASSWORD: pos_password
POSTGRES_DB: pos_db
ports:
- "5432:5432"
volumes:
- pos_db_data:/var/lib/postgresql/data
app:
image: vendor-pos:latest
depends_on:
- db
ports:
- "8080:8080"
environment:
NODE_ENV: production
PORT: 8080
DATABASE_URL: postgres://pos_user:pos_password@db:5432/pos_db
JWT_SECRET: change-me
volumes:
pos_db_data:
```
Then:
```bash
docker compose up
```
***
## Android Integration (High Level)
- Android app calls `http://<server>:8080/api/v1/...` for auth, catalog sync, and transaction upload.
- All POS operations work offline; app syncs when network is available.[^11][^12][^10]
- The web admin UI is used for vendor setup, catalog maintenance, user management, and reports.[^20][^17]