Oprogramowanie do prowadzenia prostych, osobistych ankiet.
  • JavaScript 77.2%
  • CSS 20.2%
  • Dockerfile 2.6%
Find a file
2026-07-30 15:58:53 +02:00
public Vendor EB Garamond font and extract CSS to static file 2026-07-30 13:24:16 +02:00
src Add Containerfile with graceful shutdown 2026-07-30 15:58:53 +02:00
views Render double newlines in survey intro as paragraph breaks 2026-07-30 12:34:54 +02:00
.dockerignore Add Containerfile with graceful shutdown 2026-07-30 15:58:53 +02:00
.env.example Switch to Basic auth, add HTML results view, fix QR port in URL, enhance notifications with answers and data link 2026-07-30 12:30:39 +02:00
.gitignore Pierwsza wersja aplikacji ankietowej mysurvey 2026-07-30 00:20:18 +02:00
AGENTS.md Add AGENTS.md with repo-specific guidance 2026-07-30 12:38:22 +02:00
Containerfile Add Containerfile with graceful shutdown 2026-07-30 15:58:53 +02:00
package-lock.json Vendor EB Garamond font and extract CSS to static file 2026-07-30 13:24:16 +02:00
package.json Vendor EB Garamond font and extract CSS to static file 2026-07-30 13:24:16 +02:00
README.md Switch to Basic auth, add HTML results view, fix QR port in URL, enhance notifications with answers and data link 2026-07-30 12:30:39 +02:00

ankiety

Prosta aplikacja ankietowa oparta na Node.js, Fastify i Eta. Umożliwia tworzenie ankiet przez API administracyjne i ich wypełnianie przez użytkowników w przeglądarce.

Instalacja

git clone <repo-url> ankiety
cd ankiety
npm install

Konfiguracja

Skopiuj plik .env.example do .env i ustaw zmienne:

cp .env.example .env

Wymagane zmienne:

Zmienna Opis
ADMIN_USERNAME Nazwa użytkownika do autoryzacji Basic (wymagana)
ADMIN_PASSWORD Hasło do autoryzacji Basic endpointu administracyjnego (wymagane)
NOTIFY_URL (opcjonalnie) URL tematu ntfy do powiadomień
PORT Port serwera (domyślnie 3000)
HOST Adres nasłuchu (domyślnie 0.0.0.0)
DATA_DIR Katalog na dane (domyślnie ./data)
LOG_LEVEL Poziom logowania pino (domyślnie info)

Uruchomienie

npm start        # produkcyjnie
npm run dev      # dewelopersko (z automatycznym restartem)

Dodawanie ankiety

Ankiety tworzy się przez endpoint PUT /api/surveys/:id z autoryzacją Basic. ID ankiety musi mieć 16128 znaków alfanumerycznych, myślników lub podkreśleń.

Schemat ankiety (JSON)

{
  "id": "MojaAnkieta2024-XYZ",
  "title": "Preferencje kawowe",
  "intro": "Pomóż nam dowiedzieć się, jak pijesz kawę.",
  "questions": [
    {
      "type": "select",
      "id": "rodzaj",
      "label": "Jaki rodzaj kawy preferujesz?",
      "options": [
        { "value": "espresso", "label": "Espresso" },
        { "value": "latte", "label": "Latte" },
        { "value": "czarna", "label": "Czarna" }
      ]
    },
    {
      "type": "select",
      "id": "dodatki",
      "label": "Co dodajesz do kawy?",
      "options": [
        { "value": "mleko", "label": "Mleko" },
        { "value": "cukier", "label": "Cukier" },
        { "value": "nic", "label": "Nic" }
      ]
    }
  ]
}

Wysłanie ankiety

curl -X PUT 'http://localhost:3000/api/surveys/MojaAnkieta2024-XYZ' \
  -u admin:twoje-haslo \
  -H 'Content-Type: application/json' \
  -d @ankieta.json

Poprawna odpowiedź: {"ok":true,"id":"MojaAnkieta2024-XYZ"} ze statusem 201.

Wypełnianie ankiety

Otwórz w przeglądarce adres zawierający ID ankiety:

http://localhost:3000/a/MojaAnkieta2024-XYZ

Odpowiedzi

Odpowiedzi zapisywane są w pliku data/<id>.csv. Każdy wiersz zawiera adres IP osoby odpowiadającej i odpowiedzi na kolejne pytania, oddzielone przecinkami.

Przykład:

ip,rodzaj,dodatki
127.0.0.1,latte,cukier
192.168.1.5,espresso,nic

Ponowne wczytanie po restarcie

Wszystkie specyfikacje ankiet z katalogu DATA_DIR są automatycznie wczytywane przy starcie serwera.