SkautDevs / kissj

Keep it Simple Stupid Jamboree registration system
https://kissj.net
GNU General Public License v3.0
9 stars 13 forks source link
docker helm php php-slim-framework

kissj - Keep It Simple Stupid for Jamborees!

kissj is scouts registration system for national and international Scout Jamborees with simple idea - it has to be stupidly simple!

Core features:

KISSJ is not:

Useful links

Local development

Prerequisites

Setup

  1. Clone this repository: git clone https://github.com/SkautDevs/kissj.git
  2. Copy deploy/dev/compose.env.example to deploy/dev/compose.env and fill in the values
  3. Run the make target dev-up, so you don't have to do it manually: make dev-up
  4. add line 127.0.0.1 kissj.local to your /etc/hosts file(optional)
  5. Open http://kissj.local/v2/event/test-event-slug/ in your browser and you are good to go!
  6. To stop the containers and remove them, run make dev-down(data should be preserved)

Devstack

Backlog & roadmap

Backlog is in project GitHub issues, roadmap is in project GitHub milestones

Possible problems & fixes

STMP connection error

Local mail service

HOWTOs

How to change docker image

External deals usage

Kissj can be used to collect data from external deals, momentarily from Google Forms. From paid user you can click to "Fill up some form" and it will redirect you to Google Form with your TIE code used as user handle. After filling up the form, the data is sent back to Kissj. Data is sent by script, which is triggered by Google Forms on submit event.

Example of the script is below - dont forget to change POST_URL and DEAL_SLUG to correct values.

//var POST_URL = "https://yess.requestcatcher.com/";
var POST_URL = "https://staging.kissj.net/v3/deal/";
var DEAL_SLUG = "sfh";
var MAX_POINTS = 2;
var AUTH_KEY = 'kissj-event-auth-key';

function onSubmit(e) {
  var form = FormApp.getActiveForm();
  var allResponses = form.getResponses();
  var latestResponse = allResponses[allResponses.length - 1];
  var response = latestResponse.getItemResponses();
  var payload = {};

  for (var i = 0; i < response.length; i++) {
    var question = response[i].getItem().getTitle();
    var answer = response[i].getResponse();
    payload[question] = answer;
  }
  payload['slug'] = DEAL_SLUG;

  var grade = e?.response.getGradableItemResponses().reduce((p, e) => p += e.getScore(), 0);

  if (grade < MAX_POINTS) {
    payload['enoughPoints'] = false;
  } else {
    payload['enoughPoints'] = true;
  }

  var options = {
    "method": "post",
    "headers": {
      "Authorization": "Bearer " + AUTH_KEY,
    },
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };

  UrlFetchApp.fetch(POST_URL, options);
};

How to use the script