Wróć do narzędzi

N3XFlow

Self-hosted portal klienta do etapów projektu, odbiorów, skonsolidowanych rund uwag, zmian zakresu i historii decyzji.

SELF-HOSTED PROJECT OPSv0.1.0

Projekt dowieziony. Decyzje udokumentowane.

N3XFlow zamienia rozproszone maile i komunikatory w premium Project Room: klient zawsze widzi następną akcję, zespół kontroluje zakres, a każda uwaga, akceptacja i decyzja kosztowa zostaje przy właściwym etapie.

Dane na Twoim serwerze · jednorazowe linki e-mail · szyfrowane SMTP · brak telemetrii aplikacji

Hosting zarządzany przez N3X

Chcesz korzystać, ale nie zajmować się serwerem?

N3X może przygotować i utrzymywać tę aplikację: od uruchomienia i SSL po aktualizacje, monitoring oraz kopie zapasowe.

Zapytaj o hosting N3X

Proces, który chroni relację i marżę

Pięć bramek odbiorowych

Odkrycie, kierunek, projekt, development i wdrożenie mają własny stan, termin oraz jednoznaczną historię przyjęcia.

Skonsolidowane rundy uwag

Maksymalnie trzy wspólne odpowiedzi na etap zamiast niekończącego się strumienia sprzecznych wiadomości.

Jedna osoba decyzyjna

Recenzenci mogą dodawać punkty, ale tylko wyznaczony decision maker zatwierdza etap i dodatkowy koszt.

Kontrola dodatkowego zakresu

Błąd, pytanie i zmiana zakresu są rozdzielone, a change order zawiera cenę, harmonogram, ważność i decyzję.

Terminy 5 dni roboczych

Worker pilnuje odbiorów i zapisuje precyzyjnie, czy etap zaakceptowano ręcznie, czy uznano za przyjęty po terminie.

Logowanie linkiem e-mail

Klient nie tworzy hasła. Token jest hashowany, jednorazowy, ważny 15 minut i zużywany dopiero po potwierdzeniu.

Niemodyfikowalna historia

Append-only audit trail zapisuje aktora, czas, projekt, zdarzenie i kontekst kluczowych decyzji.

PWA gotowe na telefon

Instalacja z własną ikoną, obsługa iOS, dolna nawigacja i bezpieczny ekran offline bez zapisywania treści projektów.

DOCKER COMPOSE

Prywatny stos gotowy do white-label

Jedna konfiguracja uruchamia portal, worker i PostgreSQL. Branding agencji oraz SMTP ustawia właściciel w zabezpieczonym panelu, a sekrety nie trafiają do Compose.

N3XFlow Web — Project Roomy, role, odbiory, uwagi i panel ustawień
N3XFlow Worker — terminy, wygasanie ofert i wysyłka powiadomień
PostgreSQL 17 — projekty, decyzje i append-only audit trail
Twoje reverse proxy — HTTPS i własna domena, np. portal.aerix.pl

KONFIGURATOR DOCKER

Compose dopasowany do Twojej agencji

Ustaw domenę, adres nasłuchu, port i wersję obrazu. Konfigurator przygotuje gotowy plik Docker Compose oraz komendy startowe — bez ręcznego zarządzania sekretami.

Domena musi wskazywać na reverse proxy. Nie wpisuj https:// ani ścieżki.

0.0.0.0 zapewnia dostęp z LAN i proxy. Użyj 127.0.0.1, gdy reverse proxy działa na tym samym hoście.

Port aplikacji dla reverse proxy. Domyślnie 8792.

Zostaw latest dla najnowszego wydania albo przypnij konkretną wersję.

Branding i SMTP konfigurujesz po zalogowaniu. Po starcie otwórz http://IP_SERWERA:8792 i od razu utwórz konto właściciela. Następnie ustaw publiczny adres HTTPS i SMTP. Wykonuj spójne kopie wolumenów postgres_data oraz runtime_secrets.
Adres publiczny
https://flow.example.com
Pierwsze uruchomienie
http://IP_SERWERA_DOCKER:8792
Cel reverse proxy
http://IP_SERWERA_DOCKER:8792
Test stanu
http://127.0.0.1:8792/api/health

Gotowy docker-compose.yml

name: n3xflow

x-app-environment: &app-environment
  N3XFLOW_DATABASE_PASSWORD_FILE: /run/n3xflow/database_password
  N3XFLOW_TRUST_PROXY_HOPS: ${N3XFLOW_TRUST_PROXY_HOPS:-0}
  N3XFLOW_DEV_MAGIC_LINKS: ${N3XFLOW_DEV_MAGIC_LINKS:-0}
  TZ: Europe/Warsaw

x-app-security: &app-security
  read_only: true
  security_opt:
    - no-new-privileges:true
  cap_drop:
    - ALL
  tmpfs:
    - /tmp:size=64m,mode=1777
    - /app/.next/cache:size=128m,mode=0700,uid=1001,gid=1001

services:
  bootstrap:
    image: alpine:3.22
    restart: "no"
    command:
      - /bin/sh
      - -ec
      - |
        umask 077
        if [ ! -s /run/n3xflow/database_password ]; then
          od -An -N32 -tx1 /dev/urandom | tr -d ' \n' > /run/n3xflow/database_password
        fi
        if [ ! -s /run/n3xflow/settings_key ]; then
          od -An -N32 -tx1 /dev/urandom | tr -d ' \n' > /run/n3xflow/settings_key
        fi
        chmod 0444 /run/n3xflow/database_password /run/n3xflow/settings_key
    volumes:
      - runtime_secrets:/run/n3xflow
    networks:
      - backend
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL

  web:
    image: ghcr.io/nexitpl/n3xflow:latest
    pull_policy: always
    restart: unless-stopped
    depends_on:
      bootstrap:
        condition: service_completed_successfully
      postgres:
        condition: service_healthy
    environment: *app-environment
    volumes:
      - runtime_secrets:/run/n3xflow:ro
    ports:
      # Keep behind a firewall until the owner account exists; publish through HTTPS.
      - "0.0.0.0:8792:3000"
    healthcheck:
      test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:3000/api/health"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    networks:
      - frontend
      - backend
    <<: *app-security

  worker:
    image: ghcr.io/nexitpl/n3xflow:latest
    pull_policy: always
    restart: unless-stopped
    depends_on:
      bootstrap:
        condition: service_completed_successfully
      postgres:
        condition: service_healthy
      web:
        condition: service_healthy
    environment: *app-environment
    volumes:
      - runtime_secrets:/run/n3xflow:ro
    command: ["node", "dist/worker.cjs"]
    networks:
      - backend
    <<: *app-security

  postgres:
    image: postgres:17-alpine
    restart: unless-stopped
    depends_on:
      bootstrap:
        condition: service_completed_successfully
    environment:
      POSTGRES_DB: n3xflow
      POSTGRES_USER: n3xflow
      POSTGRES_PASSWORD_FILE: /run/n3xflow/database_password
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - runtime_secrets:/run/n3xflow:ro
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n3xflow -d n3xflow"]
      interval: 5s
      timeout: 5s
      retries: 12
    networks:
      - backend

networks:
  frontend:
  backend:
    internal: true

volumes:
  postgres_data:
  runtime_secrets:

Uruchomienie i kontrola stanu

mkdir -p n3xflow
cd n3xflow
# Zapisz skopiowaną konfigurację jako docker-compose.yml
docker compose up -d
docker compose ps
curl -fsS http://127.0.0.1:8792/api/health

Historia zmian

    • WydaniePierwsze wydanie self-hosted: panel WWW, worker terminów i powiadomień oraz PostgreSQL uruchamiane przez Docker Compose.
    • NowośćPięcioetapowe Project Roomy z osobą decyzyjną, odbiorami w terminie 5 dni roboczych i maksymalnie trzema skonsolidowanymi rundami uwag.
    • NowośćKlasyfikacja uwag jako błąd, zmiana zakresu lub pytanie oraz karty dodatkowego zakresu z ceną, terminem i jednoznaczną decyzją klienta.
    • NowośćJednorazowe linki e-mail, szyfrowane ustawienia SMTP, role projektowe i niemodyfikowalny dziennik najważniejszych zdarzeń.
    • NowośćInstalowalne PWA z dedykowaną ikoną, obsługą iOS, wygodną dolną nawigacją i bezpiecznym ekranem offline, który nigdy nie zapisuje treści projektów.
Ślad decyzji, nie substytut podpisu. N3XFlow wspiera formę dokumentową i koordynację projektu. Nie zastępuje podpisu własnoręcznego ani kwalifikowanego, gdy konkretna czynność — np. przeniesienie autorskich praw majątkowych — wymaga takiej formy.