# Annual Report System

# System Overview

The Cores Annual Report system is a stand-alone system for storing and managing the content necessary for the generation of the annual report in it's various forms. Access to the system is controlled by the University DUO 2FA system with a fallback to a magic link email based login system.

##### Tech Stack

The system uses the following technologies:

- NodeJS - Core Javascript Engine
- ExpressJS - HTTP Server Framework
- PugJS - HTML Templating Engine
- TailwindCSS - CSS Framework, Included as part of DaisyUI
- DaisyUI - CSS UI Component Preset Framework
- ViteJS - Application Template and Development Support Framework

##### AI Usage

This system has AI written and reviewed code. AI usage during development of this system consisted of use of the following models for code review purposes:

- unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4\_K\_M
- unsloth/Qwen3.6-27B-GGUF:Q8\_0

All models were run locally on the developer M2 MacBook using llama.cpp and OpenCode. No cloud hosted models were used. Any code generated directly by OpenCode in build agent mode was fully reviewed prior to commit. The RecordManager component was developed using OpenCode as the developing agent. The initial prompt for the component is located in the opencode\_prompts folder.

# Facility Manager Section Management Guide

## Overview

As part of the Annual Report process facility managers are required to review and update the content associated with their facility every year. To assist in this process managers will receive an email annually from the Cores Admin office that contains a reminder of this requirement and a link to access their content for the current fiscal year. This link will be valid for 2 weeks from the date of the email and allows them to edit specific content blocks for their sections of the annual report. If they are unable to complete the editing process within that time period a new link with an updated expiration date can be requested from the Cores Administration office.

## General Structure

Facilities should generally follow the structure outlined below when designing their content sections:

**Sections**

- **Overview -** This section should include a 1-5 paragraph overview of the facility.
- **Services -** This section should include a list of available services and instrumentation for the facility
- **Advisory Board / Committee -** Where applicable all facilities that have an Advisory Board (Required for Core Facilities) should list the members of the board and the last date an advisory meeting occurred
- **Previous Fiscal Year Update -** This section should include a 1-5 paragraph explanation of major events from the previous fiscal year. This should include an explanation of how met goals were accomplished and evaluation of why unmet goals were missed.
- **Upcoming Fiscal Year Goals -** This section should identify a list of 2 or more goals for the the upcoming fiscal year. These goals should include justifications and proposed plans for meeting said goals.
- **Revenue/Expenses**<p class="callout info">The components of this section are not editable and will be provided by the Cores Admin office. This section contains graphs and information derived from data in the Resource and BOS systems. Data displayed here is for the report Fiscal Year. If you have issues with the charts / data please contact the Cores Administration office to resolve the problem. </p>
- **Publications List -** Facilities that directly support researchers should list new publications that were published in the last fiscal year that reference the facility.

<p class="callout warning">Some sections will not be editable. These sections are normally added by the Cores Admin office to display critical data such as revenue graphs. Un-editable sections will have a red background on their section identifier icon and if you click on the icon a red lock will appear in place of the usual controls.</p>

## Notification Email

In the notification email you will find a link to the section editor interface. The URL for this link will take the following format:  
  
`https://annual-report.cores.utah.edu/section_edit?token=<long-jwt-text>`

This link is good for 2 weeks after it was emailed to you.

<p class="callout info">This link is UNIQUE to your section of the report for the current fiscal year. Do not share this link with anyone you don't want to have access to edit your section.</p>

## Editing Interface

The main editing interface consists of the header section followed by a list of content blocks.

### Header

The header will display the Fiscal Year you are editing and 4 controls.

[![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/PPYimage.png)](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/PPYimage.png)

- [![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/1tlimage.png)](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/1tlimage.png)
    
     The first button shows that the section is currently open for editing. Once you have finalized your edits to this section you can click to move the section to "approved" status. After a section has been approved no further edits can occur. If you need to have your section re-opened please contact the Cores Admin office.
- ![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/pPQimage.png)  
    The facility name button can be clicked on to collapse the facility content
- ![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/z3Pimage.png)  
    The PDF preview button allows you to view a preview of the PDF content that will be included in the printed report. It can be helpful to have the preview open in a separate tab as you are editing your content so you can see how things will look when printed.
- ![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/Pt4image.png)
    
    ![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/NcTimage.png)  
    The save changes button is used to save your changes. Please note that the PDF preview will not display your changes until you click this button. If you have pending/unsaved changes this button will be green.

To facilitate ease of editing the header section is "sticky" and will follow you down the page as your scroll/edit.

[![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/VAhimage.png)](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/VAhimage.png)

### Content Block

[![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/tA8image.png)](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/tA8image.png)

Content blocks contain the report content and come in a number of types depending on what type of content you want to display

- ![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/onDimage.png) Header Blocks
- ![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/L8Qimage.png) Paragraph Blocks - Used for editing plain text. No styling supported
- ![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/e5uimage.png) Markdown Blocks - Used for editing markdown text. Limited styling supported
- ![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/SDuimage.png) Page Break - Used to control render flow and page spacing. Primary used to push a graph onto the next page when it doesn't fit properly.
- ![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/wTWimage.png) Lists - Used to display lists with a red dot. The list element allows you to upload a newline delimited file to replace the existing content in the list.
    
    [![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/8Siimage.png)](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/8Siimage.png)
- ![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/vERimage.png) Tables - Used to display tables.

![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/lWIimage.png) The remaining 4 Icons represent the various graphs and are generally not editable. All data for the graphs comes from system data imported from the resource system.

<p class="callout info">Note regarding Paragraph and Markdown blocks:   
  
Paragraph blocks only display text. No formatting is possible on these blocks.  
Markdown blocks support the following element types:  
  
- Headings  
- Paragraphs and line breaks according to CommonMark specification  
- Bold and italic text  
- List (unordered and ordered)  
- Links  
- Horizontal Rules  
- Code Blocks  
- Inline Code  
- Blockquotes (basic support)  
  
Note that markdown lists will use black dot's instead of the preferred red for lists in the annual report.  
  
For more information about markdown support see the following sites:  
  
[https://github.com/fellmann/pdfkit-markdown](https://github.com/fellmann/pdfkit-markdown)  
[https://www.markdownguide.org/cheat-sheet/](https://www.markdownguide.org/cheat-sheet/)  
</p>

#### Content Block Controls

![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/Y2mimage.png)

The content block controls can be accessed by clicking on the block type icon. From this menu you can (in display order)

- Remove this block
- View the lock status of the block
- Move this block up one space
- Move this block one space down
- Open the block add sub-menu

[![image.png](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/scaled-1680-/ibBimage.png)](https://bookstack.cores.utah.edu/uploads/images/gallery/2026-07/ibBimage.png)

The block add sub-menu allows you to add new blocks to the configuration. From this menu you can (in display order)

- Close the block add menu
- Change the insert position to above or below the current block (defaults to inserting below)
- Add a header block
- Add a paragraph block
- Add a markdown block
- Add a page break
- Add a list
- Add a table
- Add a YoY Revenue Graph
- Add a Revenue by Source Graph
- Add a Revenue by Department Graph
- Add a Top Users by Revenue table