Pięć bramek odbiorowych
Odkrycie, kierunek, projekt, development i wdrożenie mają własny stan, termin oraz jednoznaczną historię przyjęcia.
Self-hosted portal klienta do etapów projektu, odbiorów, skonsolidowanych rund uwag, zmian zakresu i historii decyzji.
N3X Flow 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
N3X może przygotować i utrzymywać tę aplikację: od uruchomienia i SSL po aktualizacje, monitoring oraz kopie zapasowe.
Odkrycie, kierunek, projekt, development i wdrożenie mają własny stan, termin oraz jednoznaczną historię przyjęcia.
Maksymalnie trzy wspólne odpowiedzi na etap zamiast niekończącego się strumienia sprzecznych wiadomości.
Recenzenci mogą dodawać punkty, ale tylko wyznaczony decision maker zatwierdza etap i dodatkowy koszt.
Błąd, pytanie i zmiana zakresu są rozdzielone, a change order zawiera cenę, harmonogram, ważność i decyzję.
Worker pilnuje odbiorów i zapisuje precyzyjnie, czy etap zaakceptowano ręcznie, czy uznano za przyjęty po terminie.
Klient nie tworzy hasła. Token jest hashowany, jednorazowy, ważny 15 minut i zużywany dopiero po potwierdzeniu.
Append-only audit trail zapisuje aktora, czas, projekt, zdarzenie i kontekst kluczowych decyzji.
Instalacja z własną ikoną, obsługa iOS, dolna nawigacja i bezpieczny ekran offline bez zapisywania treści projektów.
DOCKER COMPOSE
Jedna konfiguracja uruchamia portal, worker i PostgreSQL. Branding agencji oraz SMTP ustawia właściciel w zabezpieczonym panelu, a sekrety nie trafiają do Compose.
KONFIGURATOR DOCKER
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ę.
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}
N3XFLOW_UPLOADS_DIR: /var/lib/n3xflow/uploads
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
- uploads_data:/var/lib/n3xflow/uploads
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:
uploads_data:
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/healthPORADNIK
Instalacja, pierwsze kroki, ustawienia i rozwiązywanie problemów.
N3XFlow to portal współpracy z klientem: etapy projektu, uwagi, akceptacje, zmiany zakresu i historia decyzji.
Potrzebujesz serwera z Docker Compose, przeglądarki, domeny HTTPS oraz SMTP do wiadomości i linków logowania. PostgreSQL jest częścią zestawu.
docker compose up -d
docker compose ps
http://ADRES_SERWERA:8792 w zaufanej sieci i utwórz konto właściciela.Host i X-Forwarded-Proto.Do utworzenia konta właściciela ogranicz dostęp firewallem. Dla jednego zaufanego proxy można ustawić N3XFLOW_TRUST_PROXY_HOPS=1; aplikacja nie powinna być dostępna z pominięciem tego proxy.
Utwórz projekt, przypisz zespół, osobę decyzyjną klienta i recenzentów. Prowadź pracę przez kolejne etapy. Zbieraj skonsolidowane uwagi, ustalaj zmiany zakresu i zapisuj decyzje.
Wbudowany Guide objaśnia odpowiedzialności, terminy, rundy uwag, załączniki oraz zasady akceptacji po polsku i angielsku. Korzystaj z niego razem z ustaleniami projektu.
Powiadomienia e-mail trafiają do drugiej strony projektu. Wiadomości dla klienta zawierają jednorazowy link logowania ważny 15 minut.
Obrazy i krótkie filmy są dostępne uczestnikom projektu po zalogowaniu. Limit przesyłania wynosi 30 MB na formularz; reverse proxy powinno dopuszczać co najmniej 32 MB.
Portal można dodać do ekranu głównego jako PWA. Treść projektów wymaga połączenia z serwerem i nie jest buforowana do pracy offline.
Wykonuj spójne kopie postgres_data, uploads_data i runtime_secrets. Utrata klucza ustawień uniemożliwia odzyskanie zapisanych poświadczeń SMTP.
Przed aktualizacją przeczytaj opis wydania i sprawdź zmiany pliku Compose. Po wykonaniu kopii:
docker compose pull
docker compose up -d
docker compose ps
Przy aktualizacji starszej instalacji bez obsługi załączników zaktualizuj również Compose, zachowując nazwany wolumen uploads_data.
Jeśli nie dochodzi wiadomość, sprawdź ustawienia SMTP i docker compose logs --tail=100 worker. Wygasły link wymaga nowego linku logowania. Przy błędzie wysyłania załącznika sprawdź rozmiar oraz limit proxy. Zapisy akceptacji nie zastępują szczególnej formy podpisu, jeśli wymaga jej umowa.