# town signup

The point of this command is to enable signing up for tilde.town via an ssh connection. It is designed to be run when `join@tilde.town` is SSH'd to.

## to-dos

- [x] finish this command
  - [x] interactive guts
  - [x] logging
  - [x] write answers to disk
  - [x] take out sidebar
  - [x] add /help
  - [x] make copy clearer (that you say whatever and *then* type verb)
  - [x] enter to send
  - [ ] splash screen       - put off
  - [ ] easter egg commands - put off
  - [ ] inactivity timer(?) - put off
- [x] review tool
- [x] actual account creation
- [ ] backlog
	- [ ] get a manual dump from psql of json
	- [ ] convert into files in the review directory


## configuration

On disk assumptions:

- `/town/var/signups` exists and is owned by user `join` and group `admin`
- `/town/var/signups/log` exists and is owned by user `join` and group `admin`

Assumes the following has been run:

```bash
sqlite3 /town/var/signups/signups.db < /town/src/town/sql/create_signups_table.sql
sudo chown join:admin /town/var/signups/signups.db
```

It assumes, in `sshd_config`:

```
Match User join
        ForceCommand /town/src/town/cmd/signup/signup
        PubkeyAuthentication no
        KbdInteractiveAuthentication no
        PasswordAuthentication yes
        PermitEmptyPasswords yes
        DisableForwarding yes
```

and in `/etc/pam.d/sshd`:

```
auth [success=done default=ignore] pam_succeed_if.so user ingroup join
```

## initial thoughts

I need a script for how this interaction should go. It should feel more organic and fluid than just filling out a form. It shouldn't, however, take more than 10 minutes to get through stuff. The end result is to collect:

- an email address
- how a user found out about the town
- if they have a referral from an existing member
- what interests them about the town
- any links to personal websites or social media

A given is that the applicant is interacting with a "host" that guides them through the process. Should there be more than one host?

How many rooms should there be? 1? more?

in terms of data collection, I intend to just save the transcript of their interaction instead of more structured data. The only real structured data are email and referral.

another idea/thought/dream:

the whole point of this is to spatialize a form. it's a form! a set of questions and corresponding textarea elements. but in order to trigger self reflection -- as well as a feeling of being seen by another (in a good way) -- i want to turn the form into a shape. i'm thinking about this like the room in Eclipse Penumbra:

(For the Hollow Head was drug paraphenalia you could walk into. The building itself was the syringe, or the hookah, or the sniff-tube)

so, spatialized, every room is a question. the rooms take shape as a linear script the user moves through by:

1. answering a question
2. executing a verb

and finally at the end, a verb to confirm submission.

## author 

vilmibm
