# iistwin [![CI](https://github.com/iisultanov/iistwin/actions/workflows/ci.yml/badge.svg)](https://github.com/iisultanov/iistwin/actions/workflows/ci.yml) ![Node.js](https://img.shields.io/badge/node-%3E%3D20-brightgreen?logo=node.js&logoColor=white) ![License](https://img.shields.io/badge/license-MIT-blue) ![PostgreSQL](https://img.shields.io/badge/postgres-%3E%3D15-336791?logo=postgresql&logoColor=white) ![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen) 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).