Project Requirements
Executive Summary
The SILAB Digital Hub is a bilingual web platform that centralizes announcements, author information, event schedules, and accessibility support for the Salon interculturel du livre de l’Alberta. It is designed to improve coordination across cities, increase student and community engagement, and provide an inclusive, accessible experience for attendees, authors, and organizers.
Project Glossary
- Workshops: paid mini-events at the Book Fair, where guests can learn a new skill
Similar Products
-
- A French Book fair website in Montréal.
- Webpage functionality mirrors the requirements of this project’s
-
- Nonfiction festival website in Edmonton
- Has a great presenter’s tab that can be used as inspiration for the “Living Library”
-
- Book fair coordinator’s website
- Has bilingual English and French functionality
Open-Source Products
-
- Large literary festival with an online presence
- Shows how authors, schedules, and cultural programming are presented digitally
-
Digital Public Library of America
- Open digital platform aggregating cultural and historical content
- Inspiration for archiving, discoverability, and long-term access
- GitHub: https://github.com/dpla
-
- Large-scale digital heritage platform
- Demonstrates best practices in multilingual access and accessibility
- Inspiration for heritage preservation and inclusive design
- GitHub: https://github.com/europeana/
External Interfaces
- YouTube Embed
- Embed recorded talks, panels, and author interviews
- Archive past events and author conversations
- No need to host large video files
Technical Resources
Frontend
- Next.js – React framework for server-side rendering and static site generation
- TypeScript – Static typing for improved reliability and maintainability
- Tailwind CSS – Utility-first CSS framework for styling
- Axios – HTTP client for API request handling
Backend
- Express.js – Lightweight Node.js framework for building REST APIs
- TypeScript – Type-safe backend development
- Zod – Schema-based request validation
- Prisma ORM – Type-safe database access layer
Database
- PostgreSQL – Relational database management system
DevOps & Deployment
- Docker – Application containerization
- Docker Compose – Multi-container orchestration
- Nginx – Reverse proxy and web server
- GitHub Actions – CI/CD automation pipelines
Package Management
- npm – Dependency and package management tool
User Stories
US 1.00 – Access & Navigation
- US 1.01 As a user, I want to be able to access the website both on desktop and mobile, so that I can use it on any device.
Acceptance Criteria:
- Test that all UI elements show up on desktop
- Test that all UI elements show up on mobile
- US 1.02 As a user, I want to view the website in both English & French, so that I can access the information in either language.
Acceptance Criteria:
- Test that the database holds both french and English information
- Test that the French page does not display English
- Test that the English page does not display French
- Test that you can go from the English page to French page
- Test that you can go from the French page to the English page
- US 1.03 As a user, I want to jump to the KAYANOU website, so that I can see what other events they host or services they offer.
Acceptance Criteria:
- Test that the link is visible in the UI
- Test that the link title is displayed as opposed to https:/
- Test that it goes to the KAYANOU website
US 2.00 – Ticketing & Payments
- US 2.01 As a user I want to pay for a ticket to go to workshops (and other paid events), so that I can have access to other interesting mini-events
Acceptance Criteria:
- Test that the ticket is sent to the user in an email
- Test that a user cannot pay for an unavailable ticket
- Test that a user is given a time limit to check out, so that they cannot "claim" a ticket for a long time before checking out
- Test that the user will be charged the correct amount
- Test that payment is taken securely.
- US 2.02 As a user, I want to pay for more than one ticket to workshops (and other paid events), so that I can pay for my dependents.
Acceptance Criteria:
- Test that a user cannot pay for more tickets than the current available capacity
- Test that all tickets are sent to the user in one email
- Test that a user cannot pay for unavailable tickets
- Test that a user is given a time limit to check out, so that they cannot "claim" tickets for a long time before checking out
- Test that the user will be charged the correct amount
- Test that payment is taken securely.
- US 2.03 As a user, I want to pay for author books, so that I can have access to the media after the event
Acceptance Criteria:
- Test that payment is taken securely
- Test that it charges the correct amount
- Test that user now has access to the book
- Test that access does not disappear
- US. 2.04 As a user, I want to pay for media in the Resource center, so that I can have access to the media after the event
Acceptance Criteria:
- Test that it securely takes payment
- Test that it only charges the displayed amount
- Test that media that was previously locked is now accessible
- US 2.05 As a user, I want my ticket to be emailed to me post-purchase, so that I can show it to the ticket scanner at the workshop (and other paid events). Will need to pay for workshops in advance (schools, and regular book fair guests)
Acceptance Criteria:
- Test that the ticket is emailed within a reasonable amount of time
- Test that all necessary information is on the sent ticket (location, date, time, who purchased the ticket)
US 3.00 – Author “Living Library” Directory
- US 3.01 As a user, I want to view a list of authors participating in my desired city (Edmonton or Calgary), so that I can discover diverse literary voices.
Acceptance Criteria:
- Authors from Calgary do not show up in Edmonton list
- Authors from Edmonton do not show up in Calgary list
- US 3.02 As a user, I want to see an author's biography, photo, and published works in their profiles, so that I can learn about their background and work.
Acceptance Criteria:
- Tests that all necessary UI elements are visible to the user
- Test that user cannot edit any of the information
- US 3.03 As a user, I want to filter authors by location (Edmonton or Calgary), genre, language, or region entered by authors (as opposed to a predefined list), so that I can easily access the work I'm looking for.'
Acceptance Criteria:
- Test that author filter options (location, genre, language, region) are visible on the user page.
- Test that applying a filter updates the author list correctly.
- Test that multiple filters can be applied at the same time.
- Test that filters can be "undone".
- Test that filters remain after refreshing the page.
- US 3.04 As a user, I want to view a list of books and works with title, description, and author, so that I can learn about the featured works.
Acceptance Criteria:
- Test that all books/works in the database show up in the UI.
- Test that clicking into the book takes you to a more detailed page of the book.
- Test that all necessary UI elements of a single book/work show up.
US 4.00 – Events & Schedule
- US 4.01 As a user, I want to view all the events in a list organized by location, date, and time, so that I can plan my participation.
Acceptance Criteria:
- Test that the book fair registration option is visible on the user page.
- Test that the registration form is displayed when the user selects the registration option.
- Test that submitting the form with valid information successfully registers the user.
- Test that a confirmation message is shown after successful registration.
- Test that user registration records are stored successfully in the database.
- US 4.02 As a user, I want to view detailed information about the events, so that I know when and where it is and the intended audience.
Acceptance Criteria:
- Test that the event list is visible on the user page.
- Test that events are displayed with location, date, and time information.
- Test that the event list updates correctly when new events are added.
- Test that event date, time, and location are stored successfully in the database.
- US 4.03 As a user, I want to filter events by date, time, location, and intended audience, so that I can choose events based on my interests.
Acceptance Criteria:
- Test that selecting an event opens the event detail view.
- Test that the event detail view displays the date, time, and location.
- Test that the intended audience is displayed on the event detail view.
- Test that the event detail information matches the selected event.
- Test that it shows the correct event.
- US 4.04 As a user, I want to scan a QR code to access event details, so that I can get information about the event without searching.
Acceptance Criteria:
- Test that event filter options (date, time, location, audience) are visible on the user page.
- Test that applying a filter updates the event list correctly.
- Test that multiple filters can be applied at the same time.
- Test that filters can be "undone"
- Test that filters remain after refreshing the page
- US 4.05 As a user, I want to scan a QR code to access event details, so that I can get information about the event without searching.
Acceptance Criteria:
- Test that the QR code leads to the right event.
- Test that the QR code works with Iphone, Android, Samsung etc.
- Test that the QR code is unique.
- Test that the QR code is saved in the database.
US 5.00 – Community & Engagement
- US 5.01 As a user, I want a live community feed (mainly announcements for the book fair, spotlight on authors/artists, registering for the bookfair * needs registration form ) on the website, so that I can see real-time updates during the fair.
Acceptance Criteria:
- Test that a user cannot change the user feed.
- Test that all news shows up in the UI.
US 6.00 – Accessibility & Inclusion
- US 6.01 As a user, I want to increase the contrast of the website’s visual elements, so that I can see the information better.
Acceptance Criteria:
- Test that a user can increase contrast
- Test that UI button for increasing contrast shows up
- Test that changes are reflected in UI
- Test that enabling contrast visibly increases readability of text and key UI elements.
- Test that the contrast setting persists after refreshing the page or reopening the site.
- Test that disabling contrast restores the default appearance.
- US 6.02 As a user, I want to request ASL or interpreter services, so that I can attend events without worrying about a language barrier.
Acceptance Criteria:
- Test that requests reach KAYANOU
- Test that you cannot send an empty request
- Test that the request will not send until ALL required information is filled out
- Test that an ASL/interpreter request option is visible on the user page.
- Test that submitting a request shows a confirmation message.
- US 6.03 As a user, I want to view or request childcare supports, so that I am not withheld by my responsibilities.
Acceptance Criteria:
- Test that requests are sent to KAYANOU
- Test that clients can access childcare support details
- Test that submitting a request with missing required info shows an error message.
- US 6.04 As a user, I want the website to be compliant with WCAG 2.1 standards, so that it is accessible to users with disabilities.
Acceptance Criteria:
- Test that contrast follows WCAG 2.1 standards
- Test that text size follows WCAG 2.1 standards
- Test that user input fields are well labeled
US 7.00 – Administration & Content Management
- US 7.01 As an authorized staff member, I want to log in securely to the admin dashboard, so that I can manage website content.
Acceptance Criteria:
- Test that a wrong password will fail
- Test that a wrong username will fail
- Test that a blank password/username won't work
- Test that hacker SQL login trick will not work
- Test that the admin page shows up after loging in.
- US 7.02 As KAYANOU staff, I want a no-code content management interface, so that I can update content without technical knowledge.
Acceptance Criteria:
- Test that no code shows up when an admin tries to content manage
- Test that admin can edit Edmonton Schedule
- Test that admin can edit Calgary Schedule
- Test that admin can edit author profiles
- Test that admin can edit book descriptions
- Test that admin can edit French info
- Test that admin can edit English info
- Test that admin can edit community feed
- Test that all edits are reflected in the UI
- Test that all edits are reflected in the database
- US 7.03 As an administrator, I want to add events to the schedule, so that users can view them.
Acceptance Criteria:
- Test that you are unable to add an event before the current date and time.
- Test that you are unable to schedule an event at the same location/time.
- Test that you are unable to add an event without the required information (Location (address), Time (Should be in typicaly French notation, and in typical english notation), Capacity (an integer), Requires Tickets (a checkbox), Ticket Price (only required if "Requires Tickets", float with only two numbers after the decimal), Event Title, Event Description)
- Test that an added event shows up in UI.
- Test that you cannot add an event outside of the Book Fair hours.
- US 7.04 As an administrator, I want to delete events from the schedule, so that users do not attend events that have been canceled.
Acceptance Criteria:
- Test that deleted events disappear from the database.
- Test that a deleted event will disappear from both the English and French versions of the schedule.
- Test that a deleted event disappears from the UI.
- Test that a deleted event in Edmonton will not impact the schedule in Calgary.
- Test that you can delete an event in both the Edmonton and Calgary schedule.
- Test that users cannot see deleted events.
- US 7.05 As an administrator, I want to have a warning message before deleting/editing/adding an event from the schedule, so that there are less clerical errors.
Acceptance Criteria:
- Test that warning messages pops up for editing
- Test that warning messages pops up for deleting
- Test that warning messages pops up for adding
- Test that the cancel button shows up.
- Test that the continue button shows up.
- US 7.06 As an administrator, I want to edit events from the schedule, so that users get the most recent information concerning an event.
Acceptance Criteria:
- Tests that edits show up in the database
- Tests that edits are reflected in the admin UI.
- Tests that edits are reflected in the user UI.
- Test that you cannot make an event become blank
- Test that you cannot delete required information
- Test that warning message pops up when you edit
- US 7.07 As an administrator, I want to edit both French and English schedules, so that information in both languages is accurate and updated.
Acceptance Criteria:
- Test that changes in the French Schedule will not affect English schedule
- Test that changes in the English schedule will not impact French schedule
- Test that changes are seen in the UI
- Test that changes are seen in the database
- Test that you cannot leave any required fields blank
- US 7.08 As an administrator, I want to edit both Edmonton and Calgary schedules, so that information in both locations is accurate and updated.
Acceptance Criteria:
- Test that changes in the Edmonton Schedule will not affect Calgary
- Test that changes in the Calgary schedule will not impact Edmonton
- Test that changes are seen in the UI
- Test that changes are seen in the database
- Test that you cannot leave any required fields blank
- US 7.09 As an administrator, I want to archive past events, so that outdated content does not confuse users.
Acceptance Criteria:
- Test that an administrator can mark an event as Archived from the admin dashboard UI.
- Test that archiving an event updates the event status to Archived in the database.
- Test that archived events do not appear in the public-facing events list.
- Test that archived events do not appear in public search or filter results.
- Test that archived events remain visible in the admin dashboard.
- Test that archived events are clearly labeled as Archived in the admin interface.
- Test that an administrator can unarchive an event from the admin dashboard.
- Test that unarchiving an event updates the event status to Active in the database.
- Test that unarchived events reappear in public-facing event lists and search results.
- US 7.10 As an administrator, I want to add new author profiles, so that the directory is up to date.
Acceptance Criteria:
- Test that changes are reflected in the UI
- Test that changes are reflected in the database
- Test that only admin can add a profile
- Test that you cannot add a blank author
- Test that you cannot add an author until ALL required fields are filled in
- US 7.11 As an administrator, I want to upload profile images for authors and book covers, so that the profiles are visually engaging.
Acceptance Criteria:
- Test that only admin can upload photos
- Test that only accepted formats are uploaded
- Test that uploaded photos go into the database
- Test that changes can be seen by admin
- Test that changes can be seen by users
- US 7.12 As an administrator, I want to edit existing author profiles, so that information is accurate and updated.
Acceptance Criteria:
- Test that changes are reflected in the UI
- Test that changes are reflected in the database
- Test that you cannot edit a required field to blank
- US 7.13 As an administrator, I want to add new admin profiles, so that the Book Fair team information is up to date.
Acceptance Criteria:
- Test that only admin can add new profiles
- Test that you cannot add a blank admin profile
- Test that you cannot add a new admin profile without ALL required fields.
- Test that changes are reflected in the database
- Test that changes are reflected in the UI
- US 7.14 As an administrator, I want to upload profile images for admin, so that the profiles are visually engaging.
Acceptance Criteria:
- Test that changes can be seen by admin
- Test that changes can be seen by users
- Test that only the appropriate image format is accepted
- US 7.15 As an administrator, I want to edit existing admin profiles, so that information is accurate and updated.
Acceptance Criteria:
- Test that changes are reflected on the admin side
- Test that changes can be seen by users
- Test that you cannot edit a required field to blank
- Test that only admin can edit
- US 7.16 As an administrator, I want to review accessibility requests from the site inbox, so that accommodations can be planned as needed for the event.
Acceptance Criteria:
- Test that when you click into an email, it expands
- US 7.17 As an administrator, I want SILAB content to be linked to the main KAYANOU archives, so that author contributions are preserved long-term.
Acceptance Criteria:
- Test that the link shows up
- Test that the link title shows up, as opposed to having https:/....
- Test that the link goes to KAYANOU
- US 7.18 As an administrator, I want to update the community feed, so news/author spotlights/calls for volunteers can go up at the appropriate time.
Acceptance Criteria:
- Test that update shows up in admin feed
- Test that update shows up in user feed
- Test that you cannot make a blank update
- Test that you cannot make an update without the ALL the required information
- US 7.19 As an administrator, I want to archive past news on the community feed, so that outdated content does not confuse users.
Acceptance Criteria:
- Test that archived news does not show up on the admin page
- Test that archcied news does not show up on the user page
- Test that the UI button for archiving shows up on the admin page
- Test that the UI button for archiving DOES NOT show up on the user page.
US 8.00 – Educator Resources
- US 8.01 As an educator, I want to access a secure resource center, so that I can download materials related to SILAB.
Acceptance Criteria:
- Test that media is downloaded
- Test that the correct media is downloaded
- Test that you cannot download specific media without paying first
MoSCoW
Must Have
- US 1.01
- US 1.02
- US 1.03
- US 2.01
- US 2.02
- US 3.01
- US 3.02
- US 3.03
- US 3.04
- US 4.01
- US 4.02
- US 4.03
- US 6.02
- US 6.04
- US 7.01
- US 7.02
- US 7.03
- US 7.04
- US 7.05
- US 7.06
- US 7.07
- US 7.08
- US 7.09
- US 7.10
- US 7.12
- US 7.13
- US 7.15
Should Have
- US 4.04
- US 6.01
- US 6.03
- US 7.11
- US 7.18
- US 8.01
Could Have
- US 2.03
- US 2.04
- US 2.05
- US 4.05
- US 5.01
- US 7.16
- US 7.17
- US 7.19
Won’t Have
- US 7.14