Skip to content

docs(minimal-user-flows): atomic requirements. - #196

Open
caviri wants to merge 1 commit into
mainfrom
docs/minimal-user-flows
Open

docs(minimal-user-flows): atomic requirements.#196
caviri wants to merge 1 commit into
mainfrom
docs/minimal-user-flows

Conversation

@caviri

@caviri caviri commented Aug 19, 2026

Copy link
Copy Markdown
Member

Hi @sabinem and @Panaetius, I wrote a minimal user flow for a hackathon like the one we are going to host in October. Please feel free to leave comments on the PR if you have any doubts. I omitted many other actions, such as page publication or users checking the projects pages, as I consider this sort of given, but let me know if you need that level of granularity.

@caviri
caviri requested review from Panaetius and sabinem August 19, 2026 11:48
@sabinem
sabinem force-pushed the docs/minimal-user-flows branch from f2b5de6 to aa53bf2 Compare August 19, 2026 18:26

@sabinem sabinem left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@caviri here are my comments:

This looks vibe coded and is hard to digest (I read through it, but might have missed something). What comes to my mind in this regard is "Someone has to work hard, either the writer or the reader", in this case it was the reader)

Here are the proposed tickets that I took from it, that are needed for September:

User Stories:

Early Phase (September)

E1. Participant profile

As a participant I want to set my name, affiliation, skills and picture,
so that organisers and teammates know who I am — when I have just joined
an event.

Done when

  • /account edits display name, affiliation, skills, avatar URL.
  • Only the URL is stored — no upload — and the image renders.
  • A dead URL falls back instead of showing a broken image.
  • Teammates and organisers see the profile.
  • Editing someone else's profile is refused.

E2. Custom registration form

As an organiser I want to compose my own registration questions, so that I
collect exactly what this event needs — when the standard fields are not
what I have to ask.

As a participant I want to answer them once, so that my answers are on
file — when I register.

Done when

  • Organiser adds questions with label, type (short text, single-choice,
    tags, long text, consent) and a required flag.
  • Order, types and required flags persist.
  • An unanswered required question is refused, naming the question.
  • Required consent unticked → refused; optional consent may stay unticked.
  • Organiser sees each participant's answers on their row.
  • Editing the form later does not destroy answers already given.
  • register closed → submitting the form is refused.

Decide. Affiliation and skills are also registration form questions — is the profile
the source of truth, or are they independent?

E3 Email Template

As an organiser I want to write each milestone's email once with
placeholders, so that participants get consistent, event-specific messages —
when the platform notifies people at registration, submission and results.

Done when

  • Email sending has been implemented and is coupled to events
  • Placeholders substitute per recipient; no raw placeholder reaches anyone.
  • Each milestone uses its own template
  • An unset template has defined behaviour, visible to the organiser.

Blocked on two answers. Which milestones? The source never enumerates them.
And does anything actually send? If delivery is in scope this grows an SMTP
integration, retries, bounces and preferences. Recommendation: split
editor plus substitution now, delivery as its own ticket.

E4 Dealines

As an organiser I want to state the event's cut-off dates, so that
participants see one authoritative set — when registration and submissions
have fixed deadlines.

Done when

  • All five dates persist: registration opens/closes, proposals close,
    preferences close, submissions close.
  • Participants see the relevant dates.
  • A passed deadline behaves as the decision below says, consistently with
    the capability gate.

Missing tickets?

  • I did not find anything about the branding of the hackathon: what should the organizer be able to brand (Hackathon public page, email template, registration form, etc
  • When is the profile form filled, immediately after registration, is it optional?
  • When is the registration form filled?
  • The user has two profiles: one per hackathon and one on the platform, how do they align?

Late Phase (October)

These tickets are just drafts and have not been fleshed out yet. They need to be discussed in detail later.

L1. Custom submission form

As an organiser I want to define what teams hand in, so that submissions
are comparable field by field — when judging needs a repo, a summary and a
category rather than one free-text box.

L2. Phase transition

As an organiser I want to tick which capabilities a phase opens, so that
advancing to it opens them by itself — when I set the event up once and do
not want to babysit every transition.

L3 Prizes

As an organiser I want to record what is being awarded, so that
participants know what they compete for and placements point at real prizes —
when I set the event up.

L4 Bulk team assignment from CSV

As an organiser I want to assign everyone to teams from one uploaded file,
so that I do not click through a roster of hundreds — when teams are
formed after preference matching.

L5 Participant-facing teams board

As a participant I want a board of the teams and who is on them, so that I
can see who is working on what — when teams have just been formed.

Comment thread docs/dev/minimal-user-flows/end-to-end-minimal-hackathon.jsonl
Comment thread docs/dev/minimal-user-flows/end-to-end-minimal-hackathon.jsonl

# Hackathon Setup
{"type":"action","id":7,"actor":"admin1","title":"admin builds the custom registration form","page":"/my/hackathon/{id}/forms — Registration form (add questions)","provides":"Affiliation (text, required); Experience level (select, required); Skills (tags); Why do you want to take part? (textarea, required); Dietary requirements (text); T-shirt size (select); I accept the Code of Conduct (consent, required); I consent to event photography (consent)","comment":"The admin composes a CUSTOM registration questionnaire — each question carries a label, a type (short text, single-choice, tags, or long text) and whether it is required. Here: Affiliation (text, required), Experience level (single-choice), Skills (tags), a free-text Motivation (required), Dietary needs, and T-shirt size (single-choice), plus two consent checkboxes (Code of Conduct required, photos optional). Participants answer exactly these on their registration form."}
{"type":"action","id":8,"actor":"admin1","title":"admin builds the custom submission form","page":"/my/hackathon/{id}/forms — Submission form (add questions)","provides":"Repository URL (url, required); Live demo URL (url); One-paragraph summary (textarea, required); Primary category (select, required); Slides (PDF) — upload or link (file-or-url)","comment":"The admin defines the CUSTOM questionnaire teams answer when they turn work in: Repository URL (required), a Live demo URL, a Summary (long text, required), a Primary category (single-choice, required), and Slides (upload or external link). The submission is validated against exactly these questions."}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requirement: a custom submission form. (Needed later)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @sabinem, we need this earlier, as some questions need to be taken from the participants once they are registered.

A user should be able to edit these options afterwards (but I didn't include that in this basic flow as I don't consider that a priority)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@caviri This I don't understand. As the submission form is per team. How can be filled in early? It can only be tackled once the teams are assigned. So I would still consider that to come late, or could you please explain what you mean: what would happen at an early stage with the submission form?

@caviri caviri Aug 20, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @sabinem, you are right, my bad I got confused by registration form. Submission form can come later, indeed.

Comment thread docs/dev/minimal-user-flows/end-to-end-minimal-hackathon.jsonl
Comment thread docs/dev/minimal-user-flows/end-to-end-minimal-hackathon.jsonl
Comment on lines +37 to +38
{"type":"action","id":33,"actor":"user1","title":"user1 configures their profile (name, skills, avatar image URL)","page":"/account — edit profile","provides":"displayName, affiliation, skills, avatarUrl","comment":"user1 fills their platform profile. The avatar is set from an image URL hosted by an EXTERNAL provider — a link, not an upload; the platform stores only the URL."}
{"type":"action","id":34,"actor":"user1","title":"user1 submits the registration form (participation)","page":"/register/{id} — the registration form","provides":"hackathonId, responses, consents","comment":"user1 answers the admin's custom registration questions (affiliation, experience, skills, motivation, diet, T-shirt) and ticks the required consent; the answers are stored against their participation."}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requirement: Custom Registration form, set by hackathon owner?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, the admin1 in this case\

Comment thread docs/dev/minimal-user-flows/end-to-end-minimal-hackathon.jsonl
Comment thread docs/dev/minimal-user-flows/end-to-end-minimal-hackathon.jsonl
# Projects submissions
{"type":"pages-state","id":55,"at":"Hacking phase — submissions open","phase":"Hacking","capabilities":["create_project_submissions"],"sees":{"anonymous":"the public event page","admin1":"submissions as they arrive","user1":"a “Turn in work” control for Team1","user2":"a “Turn in work” control for Team2"}}
{"type":"action","id":56,"actor":"user1","title":"user1 turns in Team1's work","page":"/my/hackathon/{id}/submissions","provides":"teamId, projectId, result, form","comment":"user1 submits Team1's work against Project1."}
{"type":"pages-state","id":57,"at":"user1 turns in Team1's work","who":"Team1","page":"/my/hackathon/{id}/submissions","shows":"Team1's submission appears for organisers to review"}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requirement: Organizers can review submission (later, to be discussed): What does "review" mean?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @sabinem, organisers receive the submissions, but they aren't published directly on the submissions list page. Organisers can hold some submissions for manual revision to ensure that all the content provided is correct (for instance, that all the links are valid and point to the right document)

{"type":"pages-state","id":57,"at":"user1 turns in Team1's work","who":"Team1","page":"/my/hackathon/{id}/submissions","shows":"Team1's submission appears for organisers to review"}
{"type":"action","id":58,"actor":"user2","title":"user2 turns in Team2's work","page":"/my/hackathon/{id}/submissions","provides":"teamId, projectId, result, form","comment":"user2 submits Team2's work."}

# Voting phase

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requirement: Voting implementation (Needed later, to be discussed)

@caviri

caviri commented Aug 20, 2026

Copy link
Copy Markdown
Member Author

HI @sabinem, I'll focus on your user stories for the first iteration.

E1. Participant profile

Hi @sabinem, we need to differentiate between the user profile and the participant profile here. User refers to the general platform profile, while participant refers to the user who registered on the platform.

I'd recommend keeping /account for the platform user profile, while the participant profile (and all custom information) can be placed within the hackathon, such as this pseudo-path /hackathon/{hackathonId}/participant/{participantId}

Editing its own profile is optional at this stage.

E2. Custom registration form

@sabinem I think the Done when is miscopied from above.

But I'll keep everything that is not strictly necessary for the platform registration in the custom forms. This includes skills and affiliation.

E3 Email Template

I wrote it above, but I suggest we drop this one for the time being. This is a nice-to-have frontend email generator that can help send private registration links via a third-party email client. It's a workaround for the lack of SMTP integration. But it's fine; we can drop it.

E4 Dealines

I'll set deadlines to match the time extensions for different phases. This can simplify the actual development.

Missing tickets?

  • I did not find anything about the branding of the hackathon: what should the organiser be able to brand (Hackathon public page, email template, registration form, etc

Non-essential by now. Let's leave this to the main URL image provided and the content they can place in Markdown.

  • When is the profile form filled, immediately after registration, is it optional?

Let's keep the profile form simple and just with the data from Keycloak. Otherwise, extra fields should be filled right after registration.

  • When is the registration form filled?

The participation form is mandatory after applying for hackathon registration

  • The user has two profiles: one per hackathon and one on the platform, how do they align?

Replied above.

@sabinem

sabinem commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator

@caviri Just to be sure that I understand you correctly:

Can you please check the following tickets and decisions:

  • E1 Participant Profile, no ticket as we will keep the user profile to a minimum, that is already there
  • E2 Registration Form: Custom User Registration Form #197
  • E3 Email Template: No ticket, as we will postpone this.
  • E4: Custom Submission Form: Can you explain why we need that early. See my comment above. Also see below: it was promised for the second phase only
  • E5: Deadlines: Show Deadlines on Platform #203 There is still a question open on this ticket

I copied this here from Slack: it was not in the Workflows:

For the first iteration, which needs to be ready by end of August, the minimum scope is:

  • A1: A home page whose content can be provided/updated by Valerio and pushed to the platform.
  • A2: The participant registration form.
  • A3: Access to the project/platform after registration.
  • A4: Team assignments

For the second delivery:

  • B1 Projects submissions
  • B2 Projects voting

So what is not covered in the tickets above is A1 and A4, can you please comment on these two items, so Team Assignments (A4) should also be ready by August? And what about A1, can you specify this further please?

@caviri

caviri commented Aug 20, 2026

Copy link
Copy Markdown
Member Author

Hi @sabinem,

Regarding E4: Custom Submission Form.

My mistake I thought you were referring to Custom Hackathon Registration Form. not Custom Project Submission Form.

Regarding A1: A home page whose content can be provided/updated by Valerio and pushed to the platform.

This is referring to the hackathon main picture and a public description in markdown (containing emebedded images and youtube embedded videos). This is sort of urgent, as we discuss with Valerio he wouldn't mind finding a programatic way of inserting this content. Do you think we can solve this by seeding this data? or allowing a client to submit via API the hackathon details? I don't like the idea of mixing content with the codebase.

And team assigment would be great to have it also by august, it will remove some pressure from the second iteration. We could aim for the CSV/JSON interface and keep a more polish version for later.

@sabinem

sabinem commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator

@caviri Thanks for answering.

  • Yes I think we can have the team assigments by August, but let's see.
  • I will think about the adding of the content by the hackathon owner.
  • I saw Valerio today in Zürich and he asked for having a meeting next week, where we can test run again some of the features developed until then.
  • I asked him also on a few details in regards to features we are going to implement and it was helpful. The core part of the platform (phases and capabilities) on main is exactly as he wanted it, which is good news.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants