This is a bit lighter-weight than using GH issues, and will do for now (while we're building it out & exploring the problem space).
-
modify auth_required hook to do the "create user if doesn't exist" thing (looks like the on_mount is the way to go in the end...)
-
add QR code component, look at (Panic!)[https://github.com/benswift/panic/blob/main/lib/panic_web/components/panic_components.ex#L235] if it helps
-
set up a PhoenixTest which can log in and then do stuff
-
faciliator view which which lists all curerntly-connected participants (the (Docs)[https://hexdocs.pm/phoenix/presence.html#usage-with-liveview] have an example of doing just this we could use as a staring point)
-
add the required logic to SessionServer to actually manage the session's progress
-
add policies/authorizations
- Phoenix LiveView (for web stuff)
- Ash & AshPhoenix (for data modelling)
- SaladUI
- PhoenixTest (and hopefully PhoenixTestPlaywright) for front-end testing
- cytoscape.js (in a phoenix hook) for rendering the diagrams
- AshAuthentication (with passwords, maybe even magic links?) for auth
- InstructorLite for platform-agnostic API use
- LiteFS for "hosted SQLite"
- (maybe) use this for cycle detection (via rustler) but honestly we might just hand-roll something naive
as an example:
mix ash.gen.resource \
Revelo.Diagrams.Variable \
--uuid-primary-key id \
--timestamps \
--default-actions read \
--attribute "name:string:required,description:string:required,voi?:boolean:required,included?:boolean:required" \
--relationship "belongs_to:session:Revelo.Sessions.Session:required,has_many:votes:Revelo.Diagrams.VariableVote"
-
data model-wise, maybe we don't actually want a session -> participants (or even session -> users) relationship? could just get that info from the list of variables (via their :creator attribute)
-
should we add phoenix storybook?