The software developed for the Learning Resources Center (LRC) at the University of Colorado Denver provides a comprehensive solution for the LRC's online and digital presence. It includes a range of features tailored to meet the LRC's needs, such as scheduling capabilities that enable administrators to create session schedules based on staff availability. These schedules are displayed to users in a well-organized and highly intuitive format.
Moreover, the software boasts document upload and management functionality, complete with in-depth analytics accessible to administrators. A powerful search engine allows users to search by keywords, generating results related to all sessions entered into the database via the schedule editors.
The software also features a builder for asynchronous course materials, which supports document uploads and organizes these materials in a user-friendly manner. Future plans include the development of mobile and TvOS applications for interactive digital signage, further expanding the LRC's online presence.
The website's URL system follows a specific structure that is essential for its proper functioning. This system allows administrators to create and manage new services dynamically without any technical expertise.
All dynamic pages, which display either a calendar or schedule system, are structured like this:
https://ucdenver.xyz/learning-resources-center/<type>/<service>
All other pages are considered static because they display fixed information that doesn't change as frequently as dynamic services and don't require a system to manage any events. These pages' URLs look like this:
https://ucdenver.xyz/learning-resources-center/<page-name>
Each service has a type, either Schedule or Calendar. The type is specified in the first part of the URL after the base address. It should be a single, lowercase word without spaces or special characters:
https://ucdenver.xyz/learning-resources-center/schedule/some-service-name
https://ucdenver.xyz/learning-resources-center/calendar/some-service-name
The service name acts as a unique identifier for each page. While the name performs various tasks in the backend, its primary function is to create a new folder in the database where future sessions will be stored and managed. The service name should be specific, lowercase, and without spaces or special characters, such as peer-tutoring or study-skills-workshops.
https://ucdenver.xyz/learning-resources-center/service-type/<descriptive-service-name>
If a 404 error or any other type of error occurs, always double-check the URL, as it can often be the primary cause of issues within the system.
https://ucdenver.xyz/learning-resources-center/service-type/name with spaces, CAPS, or illeg&@l ch@r&@ct3r5
This section outlines the different event types provided by the system. These events can be added and managed by administrators, and displayed to users in specific formats.
1 weekly session
11:00am
1:00pm
Jane Doe
2 hours
Scheduled Sessions follow a specific organization method that requires a certain set of values for each session. These inputs use a specific naming convention, which will be explained below:
The subject is used to group sessions together under a broader term, referred to as Subject in the editor. This not only groups sessions with a common subject (like Chemistry for all general chemistry and organic chemistry sessions), but also allows users to filter sessions by subject before browsing them.
The course groups sessions together that cover the same content. Continuing the example above, a General Chemistry course would be organized under the Chemistry subject, and further grouped under the General Chemistry Course.
Courses can be separated by commas. This means that if Jane Doe's session covers General Chemistry 1 and General Chemistry 2, the course information can be entered as 'General Chemistry 1, General Chemistry 2', and the system will divide that single session into two different courses. The example above illustrates one session covering both courses.
The mode of the session indicates whether the session is hosted live, in-person, or remotely via Zoom. If the session is set to Zoom, a hyperlink should be included.
The host is displayed to the user to humanize our services and, ideally, to put a face to the session. The host can either be entered as a simple name, or the staff's profile can be created via the staff editor.
Day: This input indicates the recurring day each week that the session is held.
Start and End Time: These inputs set the start and end time of the session. Sessions are organized in order of start time.
Start and End Date: These inputs determine whether the session is active. These inputs default to the current semester so that sessions disappear once the semester has concluded, or when our services for the semester end. Alternatively, you can use these inputs to create a temporary session that will only appear to users between the provided dates.
Keywords: Although optional, these keywords are important for providing users with a quick overview of topics and content covered. Additionally, they are searchable through the system's search engine. For example, if a user searches for 'Balancing Equations', a keyword included in this input, the session will appear in the search results for users to find easily.
Additional Info: Although optional, this section can be used to engage students. The heading (required when the checkbox is selected) can be used to creatively describe the benefits students can gain from attending the session, while the text provides further context about the session.
Hyperlink: Whether a session is remote or in-person, a hyperlink can be attached to the session for features like registration or connecting to a Zoom meeting room. The Text input is used for the text displayed to the user, while the URL is embedded underneath. Note: The URL requires a full URL (including https://).
The Location feature allows admins to add a custom location to in-person sessions (the feature will disable automatically if the sessions is set to zoom). When left unchecked for in-person sessions, the system will default to displaying the Learning Hub as the location (Builing), provide a google maps link to that location (link), and will not provide a room number (room). When checked, however, admins will be required to input the Building name, with the option of providing a location link and/or a room number for that session.
Building (Required): Will display in large text indicating the session location. This will be an at-a-glance indicator to the student where the location is. If possible, use the campus name of the building, or something the student is likely to reccognize.
Link (Optional): will provide the student with additional resources should they not know what/where the building is based on the provided name. This field is optional, but could be very useful by increasing the accessability and overall user experience.
Room (Optional): Can be used as auxillary information should the room be known when the session is created. This should be Carefully inputted as the student will see a paragraph that reads 'Meet <session host> in person in the <building name> in room <room name>'.
Apr
at
11
12:30 PM
Calendar sessions are one-time events that occur on a specified date and disappear after that date.
Subject: This input groups sessions with the same subject. It also groups these sessions together via the subject filter on the user's end.
Date: The specified date this session is held.
Duration: The duration of the session.
Mode: Specify whether the session is held in-person or remotely via Zoom.
The host is displayed to the user to humanize our services and, ideally, to put a face to the session. The host can either be entered as a simple name, or the staff's profile can be created via the staff editor.
Keywords: Although optional, these keywords are important for providing users with a quick overview of topics and content covered. Additionally, they are searchable through the system's search engine. For example, if a user searches for 'Balancing Equations', a keyword included in this input, the session will appear in the search results for users to find easily.
Additional Info: Although optional, this section can be used to engage students. The heading (required when the checkbox is selected) can be used to creatively describe the benefits students can gain from attending the session, while the text provides further context about the session.
Hyperlink: Whether a session is remote or in-person, a hyperlink can be attached to the session for features like registration or connecting to a Zoom meeting room. The Text input is used for the text displayed to the user, while the URL is embedded underneath. Note: The URL requires a full URL (including https://).
The Location feature allows admins to add a custom location to in-person sessions (the feature will disable automatically if the sessions is set to zoom). When left unchecked for in-person sessions, the system will default to displaying the Learning Hub as the location (Builing), provide a google maps link to that location (link), and will not provide a room number (room). When checked, however, admins will be required to input the Building name, with the option of providing a location link and/or a room number for that session.
Building (Required): Will display in large text indicating the session location. This will be an at-a-glance indicator to the student where the location is. If possible, use the campus name of the building, or something the student is likely to reccognize.
Link (Optional): will provide the student with additional resources should they not know what/where the building is based on the provided name. This field is optional, but could be very useful by increasing the accessability and overall user experience.
Room (Optional): Can be used as auxillary information should the room be known when the session is created. This should be Carefully inputted as the student will see a paragraph that reads 'Meet <session host> in person in the <building name> in room <room name>'.
Welcome! Here's an easy guide to help you add and manage sessions in our system, no tech expertise needed!
Choose Your Service Type: First, decide if you're setting up a calendar (for specific dates) or schedule (for a range of dates) service.
Name Your Service: Pick a simple, descriptive name for your service, like "Peer Tutoring" or "Study Skills Workshops."
Create Your URL: Follow the steps in the navigation section to create a unique link for your service.
What's Important: Each session needs a date, which tells everyone when it's happening and tells the system when to show or hide it.
Visibility: Sessions set for future dates are automatically shown. They'll hide after the session's end, calculated by adding the session's duration to its end date.
Defining Dates: Start and end dates are key. The system shows the session only between these dates.
Semesters: You can set a default start and end date by defining the current semester. Check the Semesters section for more.
LIVE
Meaning: The session is happening now or coming up soon and is visible to users.
Calendar Session: The date is coming up.
Scheduled Session: The date falls between the start and end dates.
WAITING
Meaning: The session is set for a future date and isn't shown to users yet.
Details: Hover over the status for a countdown to when it'll be visible.
DISABLED
Meaning: The session has passed and isn't shown anymore. It's also marked for automatic deletion.
Deletion: 30 days after the session's end, it'll be removed from the system.
Details: Hovering shows how many days are left until deletion.
TEMP LIVE
Meaning: The session has temporary changes and is shown with those edits.
Details: Similar to LIVE status, but with temporary adjustments.
UPDATING
Note: This status was for a student view that's no longer in use. It meant updates were pending and would be visible soon.
And that's it! With these steps and tips, you'll be managing your sessions like a pro in no time. If you have any questions, don't hesitate to ask.
All session types support the ability to edit each session's information after it has been published. To access these editing capabilities, click on the more menu on the left of all sessions in the admin interface (the three vertical dots).Note: When editing or making any changes to session data, the site will take two to five minutes to reflect those changes to the user. See how the system works for more information.
Editing sessions allows you to modify any piece of that session's data. The editor will populate the session as it currently exists in the inputs of the editor. After pressing the submit button at the bottom, any changes you make will be reflected on the user end. Changing the subject, courses, or start time will alter where the session appears for the user.
For Example: changing the subject will reorganize that session under its new subject, changing the courses will add that session to its new course, or changing the start time will reorganize that session into its correct place (sorted by start time) relative to other sessions in that course.
1 weekly session
Jane Doe's session on Tuesday at 11:00am has been cancelled.
11:00am
1:00pm
Jane Doe
2 hours
Session is cancelled
Cancellations inform users that a session has been cancelled, and they should not expect it to occur during that session's time block.
For Scheduled Sessions: this feature requires an Initialize Date (when the session should start showing as a cancelled session), and a Revert Date (when the session should revert back to being displayed normally).
This should allow the admin to cancel a session starting and ending on one day. However, this feature is currently in the process of being fixed and does not work properly as of release 1.1.01. Admins must enter the day before, and the day after the designated cancellation date.
1 weekly session
Jane Doe's session is now in-person, temporarily starts at 11:00am,and will return to the normal schedule after 5/9/2026
11:00am
1:00pm
Jane Doe
2 hours
Temporary edits allow admins to make temporary changes to a session that will revert back to normal after the specified date. The system monitors which fields are edited in the temporary editor and uses this information to notify users about the specific changes to that session. For instance, if the start time changes, the message will say 'The session temporarily starts at NEW_START_TIME.'
Our document system enables users to upload and organize documents in folders, complete with names and descriptions. You can easily manage these documents using the Document Uploader. After uploading, there are three different methods to make the documents accessible to users.
Once documents are uploaded, a unique ID (document-id) is generated for each document. It looks something like this:
8fb629dd-3d00-4728-8263-0d7eb0eeb6e2
This ID is then used to create a dynamic page in the system where the document can be accessed and downloaded. This is how the system generates the three URLs. The structure is quite simple:
https://ucdenver.xyz/learning-resources-center/document/8fb629dd-3d00-4728-8263-0d7eb0eeb6e2
This link generates a page that displays the document name and description, allowing users to download the document by clicking a button. Every download is tracked for analytics purposes.
https://ucdenver.xyz/learning-resources-center/document/document-id
This link generates a page that initiates the document download automatically, without the user needing to click a button. Every download is tracked for analytics purposes.
The only difference between this link and the one above is a query at the end that instructs the system to bypass the interaction and trigger the download automatically.
https://ucdenver.xyz/learning-resources-center/document/document-id?bypass=true
Use this link only in special cases, such as embedding a document preview into a page. Unlike the other two links, this one does not track any analytics, so use it sparingly.
This link is different as it completely bypasses our system and provides a download directly from our database (Firebase).
This link is clearly different, as it completely bypasses our system and provides a download directly from our database (Firebase).
https://firebasestorage.googleapis.com/v0/b/fir-schedules.appspot.com/o/documents%2F8fb629dd-3d00-4728-8263-0d7eb0eeb6e2?alt=media&token=66e4e9f9-1a2a-464d-bf7b-4eedd1d0eaf8
The authentication system provides four different types of accounts, each with its own set of permissions. This helps to protect the integrity of the database and maintain a well-running system.
Member accounts have the fewest permissions and are restricted to document uploads. Within the document system, members can only manage documents they have uploaded, which means they cannot delete documents uploaded by other members.
Editors have more permissions than member accounts. They can edit schedules, publish site-wide banners, and upload staff profiles. Like member accounts, they also have access to the document uploader.
Admin accounts have access to the entire admin interface, including the Authentication Management system. Here, admins can manage all accounts in the system, remove accounts, and grant permissions to users. Admin accounts should be used with great care to avoid harming the integrity of the system.
By providing different levels of access, the authentication system helps ensure that users can only perform tasks that are appropriate to their role. Admins can use the Authentication Management system to manage all accounts and ensure that everyone has the appropriate level of access.
Super-Admin accounts are intended for developer features only and should be restricted to developers. They provide access to features that could be harmful to the system if not used carefully, such as end-to-end testing.
The Authentication Management feature enables admins to manage all accounts within the system, grant and modify account permissions, and open the system for new account registrations.
The Authentication Access toggle switch enables or disables new account registration. By default, this feature is disabled to prevent unauthorized access. When enabled, a countdown timer starts automatically for five minutes before disabling the feature again. The admin can also disable the timer by clicking on a button below the switch. Note: The admin must disable this feature when it is no longer needed to prevent unauthorized access.
After new users register, their account type is set to null by default, which means they have no permissions. Admins can assign an account type by navigating to the 'Users without permissions' section within the Authentication Management tab. Here, admins can assign a user an account type from a dropdown menu. Once assigned, the user will disappear from this list and appear under 'Manage Current Users'.
The 'Manage Current Users' section displays all current users and their account types. Admins can click on the settings cog icon next to each user to access settings such as changing their account type or removing their account from the system.
The embedded banner system allows admins to publish global or local banners to varous/all services to be included in the embeded system on SiteFinity. This feature allows messaging to inform users about important information, such as maintenance schedules, changes in hours, or system errors. The system provides the following key features:
Should a banner be required to show on a specific service (as opposed to shown on all services), it can be scoped to a specific service. I.E. the Peer-Tutoring service page.
Otherwise, it's visibility can be set to Global, which whill be shown on all embedded service pages. I.E. Peer-Tutoring, SSW, and SL service pages
To prevent the embedded UI from becoming cluttered, the maximum number of banners which can be displayed at any one time is three. This allows admins to display, for example, a global banner for all services, along with a local banner for a single service, should that ever be required. However, banners may not show up if a service attempts to display more than 3 banners, meaning an important banner, such as the disabled banner may be unintentionally omitted.
Admins can enter a title and message for the banner and indicate either a specific duration for the banner to remain visible at the top of the window when a user enters or disable the duration to require the user to manually close it.
Admins can set the tone for the banner by selecting one of four different banner types:
Information: appears blue with a blue information icon.
Warning: appears yellow/orange with a warning icon.
Disabled: appears yellow/orange with a warning icon. Learn more about the Disabled banner type below.
Alert: appears red with an error icon.
The disabled banner type is utilized to notify users that sessions are effectivly paused during the duration of the disabled banner.
In addition to the default Warning banner, this effects users in the following ways:
A notification modal pops up and notifys users of the content of the banner, with an additional message which informs users of the effective dates (the banner's start and end dates).
Once the user has dismissed the initial notification modal, should they click into a session's details, they will encounter another message on the session's detail modal which notifys them that the session is paused until the banner's end date.
Use this guide to create effective messaging via this disabled banner type.
This should describe the reason for the pause. I.E. Spring Break
This should explain effect of the pause. I.E. All sessions are paused due to Spring Break!
Using the above examples, the messaging in the initial notification modal, for example, will read:
NOTICE: Spring Break
All sessions are paused due to Spring Break!
This is in effect between the following dates:
Start Date: 01/01/0001
End Date: 01/15/0001
The legacy banner system was utilized for the LRCo system, and is no longer in use.
The banner system enables admins to publish site-wide banners for all users to see. This feature allows site-wide messaging to inform users about important information, such as maintenance schedules, changes in hours, or system errors. The system provides the following key features:
Admins can enter a title and message for the banner and indicate either a specific duration for the banner to remain visible at the top of the window when a user enters or disable the duration to require the user to manually close it.
Admins can set the tone for the banner by selecting one of four different banner types:
Success: appears green with a checkmark
Information: appears blue with a blue information icon.
Warning: appears yellow/orange with a warning icon.
Alert: appears red with an error icon.
The staff editor allows admins to upload staff profiles that can be used on various pages of the site, such as the About Us page or in session information. This editor is accessible to Editor account types and higher.
First and last name are required, although only the first name is shown to users viewing sessions. The last name may be displayed on the About Us page. The email is not included in session information; it is only used to attach staff profiles to the staff member's authenticated account.
This section requests the staff member's position(s). If the member holds multiple positions, all can be entered into this input, separated by commas. The member's biography is also required to be shown to users viewing the session information.
This image, while not required, is displayed to users in session information.
This section offers a comprehensive overview of the embed routes within the LRC's API, crucial for integrating dynamic, interactive views within the university CMS, SiteFinity, through iFrame elements. We aim to demystify the technical processes in a clear, approachable manner.
Embed routes in the API serve as conduits for embedding highly interactive views, reminiscent of the user experience on the previous .xyz system, into SiteFinity pages. These routes leverage HTMX and AlpineJS to create dynamic, responsive content.
The URL for embed routes follows a specific pattern, crucial for fetching the correct data and displaying it within the embedded views. Here's a breakdown:
/v2/embed/sessions/:type/:service?page=<currentPageNumber>&limit=<itemsPerPage>
v2: Indicates the API version, ensuring you're accessing the latest features and functionalities.
embed: Denotes the route's purpose for embedding content.
sessions: Categorizes this route under session-related content.
:type: Placeholder for the session type, such as calendars or schedules, to be replaced without the colon.
The type must be pluralized in order to correctly fetch the session.
/v2/embed/sessions/calendar/:service?page=<currentPageNumber>&limit=<itemsPerPage>
If the type is not correctly formatted, the embed system will return an error saying ' Error: Invalid type: calendar'./v2/embed/sessions/calendars/:service?page=<currentPageNumber>&limit=<itemsPerPage>
:service: Specifies the particular service, like peer-tutoring, derived from the admin console's URL structure.
?page=<currentPageNumber>: Optional query parameter for pagination, with a default start at page 1.
&limit=<itemsPerPage>: Defines the number of items per page, with a default setting of 3 for optimal viewing.
A correctly formatted url:
https://lrc-api.wm.r.appspot.com/v2/embed/sessions/schedules/peer-tutoring?page=1&limit=3
Entry Point: The primary route, getSessions, initiates the data fetching process based on the session type and service.
Data Fetching and Validation: Data is retrieved from Firebase, validated, and then undergoes extensive manipulation to fit the desired format for display.
Calendar Sessions: Validated based on their future dates, ensuring only upcoming or ongoing sessions are included.
Scheduled Sessions: Validated against their start and end dates to include only currently relevant sessions.
Calendar Sessions: Grouped by subject to consolidate similar sessions into a single view, facilitating a clearer, more organized display.
Scheduled Sessions: Undergo a more detailed organization, grouping sessions by subject and then by course, ensuring a coherent display of sessions covering similar content.
Utilizes the Pug templating engine and AlpineJS to convert the processed data into interactive HTML content suitable for iFrame embedding.
Employs HTMX for dynamic content updates, such as pagination and modal displays, without needing a full page refresh.
Modals: Detailed session information is accessible through modals, dynamically loaded using HTMX to enhance user engagement without leaving the page.
Full-Text Search: Incorporates a live search feature, debounced to optimize performance, allowing users to filter sessions based on keywords.
To enhance performance, the system employs in-memory caching for session data, with mechanisms in place for cache invalidation to ensure data freshness.
Cron Jobs: Scheduled tasks automatically clear the cache every hour as a fail-safe.
Cache Invalidation Routes: Specific routes in the admin console trigger cache invalidation upon session updates, maintaining data accuracy.
Moving from Firebase to AWS S3 for document storage offers a more cost-effective solution without sacrificing quality or accessibility.
Storing and Deleting Documents: Managed through the Document Uploader in the admin console, with seamless integration into the LRC system.
Accessing Documents: Utilizes temporary access links (presigned URLs) to securely provide document access, maintaining public access restrictions while ensuring availability.
This detailed guide aims to provide a thorough understanding of the embed routes, data handling, and document storage within the LRC system, ensuring a seamless transition and continuous operation for future administrators.
Our server is the powerhouse behind the LRC's digital services, ensuring seamless operation and up-to-date information for all users. This document aims to cover everything you need to know in an accessible manner.
The LRC Server is the foundation of our digital infrastructure, supporting applications such as DigiSign and our real-time session display system. It's responsible for a range of critical functions:
Authentication & Security: Manages secure access to our systems, ensuring only authorized devices and users can interact with our data.
Data Management: Handles the storage and retrieval of documents, along with automatic emailing for efficient communication.
Application Support: Powers the DigiSign application and integrates with SiteFinity to display live session information.
The DigiPi device is a kiosk computer which fully automates the LRC's digital signage process.
Should any of these schedules fail, a manual power on or off may be required. The schedules are system level cron jobs which should pick back up once restarted.
DigiSign referes to the name of the web application. The DigiSign site can be accessed from any device, however, only explicitly authenticated devices can proceede past the auth screen. See the next section for steps on authentication.
DigiPi refers to the computer specifically configured to run the LRC Front Desk version of DigiSign. This Raspberry Pi5 is specfically configured to automate the process of running the DigiSign application.
The DigiPi runs a lightweight version of the RaspberryPiOS Desktop version and is equipped with various scripts and jobs aimed to automate the entire digital signage solution. The machine is configured to auto-login, wake the connected TV via the HDMI-CEC protocol, and autostart the DigiSign app via a chromium brokwser configured in Kiosk mode.
DigiPi Scripts
DigiSign brings vital LRC information to life, displayed on screens across the center. It provides real-time updates on sessions, announcements, and center hours, all fed by the LRC server.
Each DigiSign device is assigned a unique ID upon installation. For security, devices start as unverified. Admins must approve each device in the admin console, linking the device ID to our system and enabling data display.
Admins can select which LRC services to feature on DigiSign. This flexibility allows for tailored content that best serves our community's needs.
Service Configuration:
Adding Services: Services are added through the DigiSign tab in the admin console, requiring the service's URL path for accurate setup.
Session Details: Displayed sessions include comprehensive information like the service name, session modality, host details, and a duration bar indicating the session's progress.
DigiSign also showcases the operating hours for various LRC services, enhancing visitor navigation and planning.
Center Name: Identifies the specific service or center.
Hours Type: Can be set to 'Consistent' for uniform weekly hours or 'Dynamic' for varying daily hours.
Weekly Hours: Admins input opening and closing times, with 'Dynamic' hours allowing for day-specific schedules.
DigiSign features two types of announcements: minimized and maximized, each serving different purposes and offering customizable content.
These compact announcements provide quick, essential updates. They're designed not to overwhelm the main display, fitting neatly between other informational elements.
Content Fields: Include a name (for admin reference), subheads, a main heading, detailed text, and an optional image URL for visual interest.
Duration and Expiration: Control how long the announcement stays visible and when it should be removed from the rotation.
Periodically, full-screen announcements take center stage, offering in-depth information or eye-catching visuals.
NOTE: Announcements are broken up into smaller sets of announcements to prevent long periods of time spent away from the main view. Announcements run 3 at a time, and once all announcements have run, will start back at the first.
Timing: Admins set intervals for these announcements, ensuring regular visibility throughout the day.
Content Types: Choose between 'Pre-Designed' for ready-made images or 'Not Designed' for custom text over a background image, which can include headings, subheadings, and paragraphs for a more detailed message.
If the DigiSign application seems to be showing information which is out of date, the issue is likely that the cache on the server failed to invalidate for whatever reason.
This is a last resort. If none of the above methods have resolved the issue, my final suggestion is to re-authenticate the device.
Please use the contact inforamtion provided below in the Contact Me section to reach out to the developer for maintenance.
This guide aims to demystify the technical aspects of the LRC Server and DigiSign application, making it accessible for non-technical staff and ensuring the smooth continuation of services. By understanding how to manage devices, sessions, center hours, and announcements, you'll be equipped to keep the LRC's digital presence vibrant and informative. Remember, this document is here as a resource for you to refer back to whenever needed.
Experiencing issues or have feedback on the website?