- number-поля теперь рендерятся как text + inputMode=numeric, чтобы браузер не округлял значения через input type=number - пробелы при вставке в number-поля удаляются - бэкенд нормализует значения number-полей в строку перед сохранением - добавлен хелпер normalizeFieldValueForStorage Closes: искажение расчётного счёта и других длинных числовых полей
90 lines
2.8 KiB
Markdown
90 lines
2.8 KiB
Markdown
# iistwin
|
|
|
|
[](https://github.com/iisultanov/iistwin/actions/workflows/ci.yml)
|
|

|
|

|
|

|
|

|
|
|
|
A multitenant corporate iistwin platform with a React frontend and an Express backend. It provides organizations with independent management of users, projects, and tasks on shared infrastructure, featuring data isolation, real-time communication, and customizable workflow automation.
|
|
|
|
## Quickstart
|
|
|
|
```bash
|
|
cp .env.example .env # fill in DATABASE_URL, JWT_SECRET, SESSION_SECRET
|
|
npm install && npm run db:push && npm run dev
|
|
```
|
|
|
|
The app will be available at `http://localhost:5000`.
|
|
|
|
## Key Features
|
|
|
|
- Custom forms with configurable statuses, transitions, and conditional approvals
|
|
- Hierarchical subtasks with unlimited nesting
|
|
- Real-time chat with `@mentions` and Server-Sent Events
|
|
- Inline-editable data tables with Excel import/export
|
|
- JavaScript-powered custom tabs and layout components
|
|
- Event-driven notification system (in-app, email, push)
|
|
- Multi-tenant billing management
|
|
- Progressive Web App (PWA) support
|
|
|
|
## Getting Started
|
|
|
|
### Prerequisites
|
|
|
|
- Node.js 20+
|
|
- PostgreSQL 15+ (or use the built-in Docker Postgres profile — see below)
|
|
|
|
### Local development (without Docker)
|
|
|
|
1. Copy the environment template and fill in the required values:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
2. Install dependencies:
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
3. Push the database schema:
|
|
|
|
```bash
|
|
npm run db:push
|
|
```
|
|
|
|
4. Start the development server:
|
|
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
The app will be available at `http://localhost:5000`.
|
|
|
|
## Running with Docker
|
|
|
|
For Docker-based setup (including a built-in managed Postgres option), see **[DOCKER.md](./DOCKER.md)**.
|
|
|
|
It covers:
|
|
|
|
- **Mode 1** — connecting to an external database (e.g. Neon Cloud)
|
|
- **Mode 2** — letting Docker spin up a local Postgres 16 container alongside the app
|
|
|
|
## Environment Variables
|
|
|
|
See `.env.example` for all required environment variables. At minimum you will need:
|
|
|
|
| Variable | Description |
|
|
|---|---|
|
|
| `DATABASE_URL` | PostgreSQL connection string |
|
|
| `JWT_SECRET` | Secret used to sign access tokens |
|
|
| `SESSION_SECRET` | Secret used for session cookies |
|
|
| `VAPID_PUBLIC_KEY` | Web Push VAPID public key |
|
|
| `VAPID_PRIVATE_KEY` | Web Push VAPID private key |
|
|
|
|
## Super Admin
|
|
|
|
A system-level super admin panel is available at `/superadmin`. The first super admin account can be created via `POST /api/superadmin/seed` (optionally protected by the `SUPERADMIN_SEED_TOKEN` environment variable).
|