* Remove hard coded devices * Create back end with storage * Determine relational or nosql for storage * Users: * Types: * regular - has own account. can CRUD own devices. can create own diagrams. can use public devices in diagrams. can submit a new device for review or suggestion for device modification. * Admin - same as regular user, but additionally: can view/approve devices and suggestions * Super Admin - same as Admin, but additionally: can CRUD users and user devices/diagrams, etc. Has full access to CRUD all data # Device Compact view * Devices should have a compact state that doesn't show individual connection points, but rather an aggregate for inputs/outputs/bidirectional. The device should show connected/not connected numbers for inputs/outputs/bidirectional so the user can see what's still got open ports * a device can be expanded to show the full individual ports * The compact view should show the name of the device, but not the make/model * There should be a virtual cable for each type of connection to another device, but all similar connections (e.g. inputs) to the same device should be shown as a single virtual cable * aggregated cables should have a special name or tag or something that lets the user know it's an aggegate. # Device Expanded view * Devices should have an expanded view that shows all connection points with name and type, the device name, make and model, and have individual virtual cables for each connection point. * There should be two different device menus. One is for public devices. One is for user defined devices. # Public device menu * Should be searchable, and have multiple views: category>manufacturer and manufacturer>category * These device definitions cannot be directly modified by a regular user. Instances of them can be used by regular users in their own diagrams. * regular users can submit modified versions for review (to help make the device definitions better for all users) # User device menu * should be searchable and viewed by device category (adapter, effect, mixer, etc) * These are user defined devices. * They are only viewable to the user that created them (and admins, but not other regular users) * user devices can be submitted for adding as a public device. * Port types and cable types should work effectively like devices: there's a public set and then users can create their own as needed, and submit for addition to the public set. * There should be an admin interface for admins and super admins # Admin/super admin interface * should allow admins to view and approve/reject submissions for devices/ports/cables * should allow admins to CRUD public devices/ports/cables * should allow super admins to CRUD all devices/ports/cables * should allow super admins to view users diagrams * should allow super admins to CRUD users diagrams * should allow super admins to CRUD user accounts * should not allow anyone to see/edit a user's password. # Bill of Materials view * Cables of the same type should be grouped together, with individual cable lengths of that type available to see when expanded with a chevron. * Cables of the same type and length should show their own count and total length * User should be able to input cost for each cable type and length, and for each device in the diagram * a cost total should be available to view # Diagram menu * a user should be able to see a list of all their own saved diagrams, and should be able to load/delete individual ones # user signup * users can use either google single sign in or manually sign up * if using google, they only need to provide a user name, we'll gather email from Google * if manual sign up, the user will provide a user name, password, and (valid) email * determine best option for sending emails * username must be unique # user sign in * users can use either google sign in or manually enter username/password * determine possible path for allowing users to change their email * determine possible path for migrating a user account from one google account to another