Page 1 of 23
System Requirements Document for kunskapsscheman
1. Introduction
Kunskapsscheman is a Swedish personal timetable application for students. It enables a student to create, save, view, revise, import, and compare a repeating weekly schedule of lessons.
The product is designed as a neon, technology-inspired scheduling instrument rather than a conventional school portal. It supports dark mode and light mode, duration-accurate lesson blocks, saved timetable preferences, room and teacher memory, bulk lesson creation, AI-assisted schedule scanning, and friend schedule comparison with emoji reactions.
The active audience is limited to the following accepted human personas:
- Student (schema owner)
- Friend / classmate viewer
Page 2 of 23
2. System Overview
Kunskapsscheman is an application-owned timetable system with account-backed saved data and custom first-party user interfaces.
A student creates an account using a username in the exact format BBBSSSS@edu.kunskapsskolan.se, where B is a letter and S is a digit, plus a password. Returning students verify with the same credentials to access their saved timetable, rooms, teacher associations, friends, and display preferences.
The application begins with no default lessons and no retained existing users. Students build a repeating weekly schedule using only two lesson types:
- KP — Kommunikationspass
- WS — Workshop
Each lesson includes a subject, time, duration, room, teacher, and KP or WS type. Lesson blocks scale visibly according to duration. The weekly schedule repeats, while individual lessons may be changed independently.
Students can add rooms by floor category, receive suggestions for previously used rooms and teachers, use remembered subject-room-teacher combinations, create multiple lessons through a bulk-add interface with a live placement preview, and scan a schedule image using AI-assisted extraction.
Students can also add friends’ schedules under names, compare lessons that occur at the same time in the same room, and send emoji reactions on friends’ lessons. Matching requires both time overlap and room equality.
Page 3 of 23
2.1 Product Interpretation and Delivery Boundary
Kunskapsscheman is a first-party web application with application-owned accounts, saved personal schedule data, and synchronization between the student’s saved timetable and friend comparison data.
The application provides:
- Public introduction and access entry.
- Self-service account creation and returning login.
- Authenticated timetable management.
- Authenticated room management.
- Authenticated schedule scanning and bulk creation.
- Authenticated friend schedule comparison and reactions.
- Authenticated preference management.
The current scope does not establish:
- School administration tools.
- Teacher-facing account management.
- Formal class enrollment.
- Grade tracking.
- Messaging beyond emoji reactions on friends’ lessons.
- Calendar integrations.
- A third lesson type beyond KP and WS.
- Default lessons or pre-populated schedules.
Page 4 of 23
2.2 Source Content Inventory
The supplied example schedule image is an authoritative feature reference for the AI schedule-scanning capability.
The system shall support scanning a timetable image and converting recognized schedule content into lessons for review before those lessons are saved into the student’s Kunskapsscheman schedule.
2.3 Page Content and Component Coverage
Page 5 of 23
Landing
- Information and state
- Public explanation of Kunskapsscheman as a Swedish personal weekly timetable tool.
- Visual introduction using a ghosted weekly timetable grid, duration-scaled lesson blocks, subject-color signals, and the visual language of the authenticated product.
- Clear entry paths to account creation and returning login.
- Primary actions
- Start account creation.
- Open login.
- Supporting actions
- View the product’s light-mode and dark-mode visual treatment as part of the public introduction.
- Domain entities
- Product identity: Kunskapsscheman.
- Subject-color timetable representation.
- Component responsibilities
- Present the product’s neon timetable-instrument visual identity.
- Explain that saved schedules are associated with an account.
- Route the student to Login without exposing protected schedule data.
- States
- Initial public state with a ghosted timetable visualization.
- Navigation error state if Login cannot be opened, with a retry action.
Page 6 of 23
Login
- Information and state
- Anonymous account creation and returning verification interface.
- Username field with the functional suffix
@edu.kunskapsskolan.se displayed as a fixed suffix.
- Password field.
- Validation guidance for the required
BBBSSSS identifier prefix.
- Primary actions
- Create an account.
- Log in with an existing account.
- Supporting actions
- Correct invalid username formatting.
- Correct missing or invalid password input.
- Domain entities
- Account username.
- Password.
- Authenticated student session.
- Component responsibilities
- Accept exactly three letters followed by four digits before the suffix.
- Append or preserve the functional suffix
@edu.kunskapsskolan.se.
- Create a new account when valid credentials are submitted.
- Verify returning credentials and open the saved Kunskapsscheman schedule.
- States
- Account creation ready state.
- Returning-login ready state.
- Validation error for an identifier that does not match
BBBSSSS.
- Authentication failure state for invalid credentials.
- Account creation failure state with retry.
- Successful authentication state that continues to Kunskapsscheman.
Page 7 of 23
Kunskapsscheman
- Information and state
- Authenticated weekly timetable for the schedule owner.
- Seven day columns and a fixed time gutter.
- Repeating weekly lesson schedule.
- Duration-scaled lesson blocks.
- Subject code, room, teacher, and KP or WS badge inside each lesson block.
- Current-time indication for the current day.
- Empty timetable state for newly created accounts.
- Friends with matching lessons when a lesson is selected.
- Primary actions
- Add a lesson.
- Select a lesson.
- Edit a lesson.
- Delete a lesson.
- Open Bulk Add.
- Open Scan Schedule.
- Open Rooms.
- Open Friends.
- Open Settings.
- Supporting actions
- Change an individual lesson within the otherwise repeating weekly schedule.
- Review friend lessons that match the selected lesson’s time and room.
- Domain entities
- Weekly schedule.
- Lesson.
- Subject.
- Lesson type.
- Room.
- Teacher.
- Friend schedule.
- Lesson match.
- Component responsibilities
- Render lesson height in proportion to lesson duration.
- Render subject-linked colors.
- Render KP and WS as small square badges.
- Display empty schedule guidance without adding default lessons.
- Display friend matches only when both time and room match.
- States
- Loading saved schedule.
- Empty schedule.
- Populated repeating weekly schedule.
- Selected lesson state.
- Friend-match result state.
- No-match state when no friend lesson has matching time and room.
- Syncing state.
- Sync failure state with retry.
- Lesson update and deletion confirmation states.
Page 8 of 23
Lesson Editor
- Information and state
- Authenticated create and edit interface for one lesson.
- Right-hand HUD drawer rather than a centred modal.
- Fields for subject, day, start time, duration, room, teacher, and lesson type.
- KP and WS selection only.
- Suggestions for previously added rooms and teachers.
- Remembered subject-room-teacher combinations.
- Primary actions
- Create a lesson.
- Save edits to a lesson.
- Delete a lesson.
- Select KP.
- Select WS.
- Supporting actions
- Select a room suggestion.
- Select a teacher suggestion.
- Enter a new room.
- Enter a teacher when a changed room needs teacher information.
- Review remembered pairing suggestions.
- Domain entities
- Lesson.
- Subject.
- Room.
- Teacher.
- Subject-room-teacher pairing.
- KP.
- WS.
- Component responsibilities
- Prevent selection of an ordinary or third lesson type.
- Prompt for teacher information when a new room is entered for a remembered subject context and no applicable teacher pairing is available.
- Remember additional valid subject-room-teacher pairings after save.
- Present previously used rooms and teachers as suggestions.
- Save a lesson into the recurring weekly schedule or update an individual lesson.
- States
- Create-ready state.
- Edit-ready state.
- Suggested pairing state, such as
BG → Hytt 5 → Karin Båvenäs.
- New-room teacher-required state, such as when
BG → Hytt 3 is entered.
- Validation error state for incomplete lesson data.
- Save success state with updated schedule continuation.
- Save failure state with retained input and retry.
- Delete success state with return to Kunskapsscheman.
- Delete failure state with retry.
Page 9 of 23
Bulk Add
- Information and state
- Authenticated multi-lesson creation interface.
- Normal GUI/UI for entering multiple lessons.
- Live preview showing where lessons will land in the weekly grid.
- Parsed lesson rows and ghost lesson blocks before commitment.
- Primary actions
- Add a bulk lesson row.
- Edit a bulk lesson row.
- Remove a bulk lesson row.
- Preview placement.
- Confirm bulk creation.
- Supporting actions
- Correct invalid fields in individual rows.
- Return to the schedule without confirming.
- Domain entities
- Bulk lesson entry row.
- Lesson.
- Weekly placement preview.
- Subject.
- Room.
- Teacher.
- KP.
- WS.
- Component responsibilities
- Allow multiple lessons to be entered through a normal graphical interface.
- Display preview blocks at their proposed weekday, time, and duration positions.
- Preserve each row’s subject, room, teacher, and KP/WS selection.
- Prevent invalid rows from being committed without identifying the row requiring correction.
- States
- Empty bulk-entry state.
- Draft rows state.
- Preview-ready state.
- Validation error state per row.
- Confirming state.
- Bulk-save success state with updated weekly schedule.
- Bulk-save failure state with draft rows preserved for retry.
Page 10 of 23
Scan Schedule
- Information and state
- Authenticated AI-assisted schedule scanning interface.
- Schedule image input.
- Document frame and scan-progress treatment.
- Extracted lesson data awaiting review.
- Primary actions
- Upload or provide a schedule image for scanning.
- Start AI scan.
- Review extracted lessons.
- Confirm extracted lessons for schedule creation.
- Supporting actions
- Correct extracted lesson information before confirmation.
- Retry a failed scan.
- Cancel without saving extracted lessons.
- Domain entities
- Schedule image.
- Scan result.
- Extracted lesson.
- Subject.
- Time.
- Room.
- Teacher.
- KP.
- WS.
- Component responsibilities
- Submit the student-provided schedule image for AI-assisted recognition.
- Display recognizable extracted lesson data for review.
- Require review before extracted lessons become saved schedule lessons.
- Continue reviewed results into the saved weekly schedule.
- States
- Ready-to-scan state.
- Uploading state.
- Scanning state.
- Extraction result state.
- Low-confidence or incomplete extraction state requiring student review.
- Scan failure state with retry.
- Confirmation success state.
- Save failure state with reviewed extraction retained.
Page 11 of 23
Rooms
- Information and state
- Authenticated room directory.
- Four distinct floor categories:
- Entrance floor
- Bryggan floor
- Hytt floor
- PReST floor
- Rooms grouped under their assigned floor.
- Primary actions
- Add a room.
- Assign a room to a floor category.
- Edit a room.
- Delete a room.
- Supporting actions
- Browse rooms by floor.
- Select a room for use in lesson creation.
- Domain entities
- Component responsibilities
- Support individually created rooms.
- Require each room to be categorized under one accepted floor category.
- Make saved rooms available as suggestions in Lesson Editor and Bulk Add.
- States
- Empty room-directory state.
- Floor-grouped room list.
- Add/edit room state.
- Validation error state.
- Save success state.
- Delete success state.
- Save or delete failure state with retry.
Page 12 of 23
Friends
- Information and state
- Authenticated friend schedule comparison workspace.
- Friend names.
- Friend schedules.
- Time-and-room matching lessons.
- Emoji reactions on friend lessons.
- Primary actions
- Add a friend schedule under a name.
- View a friend’s schedule.
- Compare matching lessons.
- Send an emoji reaction on a friend’s lesson.
- Supporting actions
- Select a lesson match.
- Send middle-finger emoji.
- Send angry emoji.
- View received reactions on lessons where applicable.
- Domain entities
- Friend / classmate.
- Friend schedule.
- Friend lesson.
- Lesson match.
- Emoji reaction.
- Component responsibilities
- Store friend schedules under student-provided names.
- Compare the student’s lessons and friend lessons.
- Treat a lesson as a match only when the time and room both match.
- Support emoji reactions, including middle-finger and angry emoji.
- Synchronize saved friend schedules, comparisons, and reactions.
- States
- No-friends state.
- Friend-added state.
- Friend schedule loading state.
- Matching lesson state.
- No matching lessons state.
- Reaction sent state.
- Reaction send failure state with retry.
- Synchronizing state.
- Sync failure state with retry and retained local information.
Page 13 of 23
Settings
- Information and state
- Authenticated saved-preferences workspace.
- Dark-mode and light-mode setting.
- Persisted visual preferences.
- Primary actions
- Select dark mode.
- Select light mode.
- Save preference changes.
- Supporting actions
- View the active display mode.
- Domain entities
- User preference.
- Theme mode.
- Component responsibilities
- Persist the selected theme preference to the student account.
- Restore saved preferences during future authenticated sessions.
- States
- Preference loading state.
- Current preference state.
- Preference-save success state.
- Preference-save failure state with retry and retained selection.
3. Functional Requirements
Page 14 of 23
FR-01 — Account Creation
As a Student (schema owner), I should create a Kunskapsscheman account using a BBBSSSS username plus the @edu.kunskapsskolan.se suffix and a password so that I can save and return to my own schedule.
- Provenance: explicit, with required_inference for self-service account creation.
- Trigger/input: The student enters three letters, four digits, and a password.
- Access state: Anonymous.
- Required behavior:
- The application shall accept usernames only in the exact
BBBSSSS prefix format.
- The application shall use
@edu.kunskapsskolan.se as the functional username suffix.
- The account identifier shall be presented and stored as
BBBSSSS@edu.kunskapsskolan.se.
- The application shall support self-service account creation.
- All existing users shall be removed before current account use begins.
- Observable result: A valid account is created and the student reaches their empty Kunskapsscheman schedule.
- Failure and recovery: Invalid username format, missing password, account creation failure, and unavailable storage shall be shown clearly; the student can correct input and retry.
- Continuation: The student can begin adding lessons or configure preferences.
Page 15 of 23
FR-02 — Returning Login
As a Student (schema owner), I should log in using my saved BBBSSSS username and password so that I can access my saved schedule and preferences.
- Provenance: required_inference.
- Trigger/input: The student submits their account identifier and password.
- Access state: Anonymous.
- Observable result: The application verifies credentials and restores the student’s saved schedule, rooms, room-teacher pairings, friend data, and preferences.
- Failure and recovery: Invalid credentials or authentication failure shall be reported without losing entered username information; the student may correct details and retry.
- Continuation: The authenticated student reaches Kunskapsscheman.
FR-03 — Empty Initial Schedule
As a Student (schema owner), I should begin with an empty timetable so that no default lessons are mistaken for my own schedule.
- Provenance: explicit.
- Trigger/input: A newly created student account is opened.
- Access state: Authenticated.
- Observable result: The weekly grid contains no default lessons and provides clear actions to add, bulk add, or scan lessons.
- Failure and recovery: If saved schedule data cannot load, the application shall show a loading failure state and retry option rather than presenting invented default lessons.
- Continuation: The student may create lessons manually, in bulk, or through scan review.
Page 16 of 23
FR-04 — Weekly Repeating Schedule
As a Student (schema owner), I should manage a weekly schedule that repeats so that my regular timetable is visible every week.
- Provenance: explicit.
- Trigger/input: The student creates or saves lessons in weekly day and time positions.
- Access state: Authenticated.
- Observable result: Lessons recur in the corresponding weekly day and time position.
- Failure and recovery: If a schedule update cannot synchronize, the application shall retain the unsaved change state and provide retry.
- Continuation: The student can select an individual lesson for editing or comparison.
FR-05 — Individual Lesson Changes
As a Student (schema owner), I should change an individual lesson so that my repeating schedule remains accurate when one lesson differs.
- Provenance: explicit.
- Trigger/input: The student selects an existing lesson and edits its lesson information.
- Access state: Authenticated.
- Observable result: The selected lesson displays its updated information in the schedule.
- Failure and recovery: Validation or save failure shall retain the entered edits and identify the field or operation requiring correction.
- Continuation: The student returns to the updated Kunskapsscheman grid.
Page 17 of 23
FR-06 — Add, Edit, and Delete Lessons
As a Student (schema owner), I should add, edit, and delete my own lessons so that my schedule reflects my actual week.
- Provenance: explicit.
- Trigger/input: The student opens Lesson Editor from the schedule.
- Access state: Authenticated.
- Required lesson inputs:
- Subject.
- Day.
- Start time.
- Duration.
- Room.
- Teacher.
- Lesson type.
- Observable result: Created or edited lessons appear in the weekly timetable; deleted lessons are removed.
- Failure and recovery: Incomplete or invalid lesson information shall prevent save and preserve entered values for correction. Delete failure shall present retry.
- Continuation: The student returns to Kunskapsscheman.
Page 18 of 23
FR-07 — KP and WS Lesson Types Only
As a Student (schema owner), I should select either KP or WS when creating or editing a lesson so that every lesson has one of the two accepted types.
- Provenance: explicit.
- Trigger/input: The student selects a lesson type in Lesson Editor or Bulk Add.
- Access state: Authenticated.
- Required behavior:
- KP shall mean Kommunikationspass.
- WS shall mean Workshop.
- No ordinary lesson type shall exist.
- No third lesson type shall be available.
- Observable result: The saved lesson records and displays the selected KP or WS type.
- Failure and recovery: A lesson missing KP or WS selection shall not save and shall prompt the student to choose one.
- Continuation: The lesson appears in the schedule with its corresponding square badge.
FR-08 — Lesson Type Badge
As a Student (schema owner), I should see a small square KP or WS icon on each lesson so that I can identify lesson type at a glance.
- Provenance: explicit.
- Trigger/input: A lesson is displayed in Kunskapsscheman.
- Access state: Authenticated.
- Observable result: Each lesson block shows a small square badge containing either
KP or WS.
- Failure and recovery: If lesson type data is unavailable, the system shall show an identifiable data error state rather than display an ordinary lesson type.
- Continuation: The student can open the lesson to correct it.
Page 19 of 23
FR-09 — Duration-Scaled Lesson Blocks
As a Student (schema owner), I should see lesson blocks scale according to duration so that short and long lessons are visually distinguishable.
- Provenance: explicit.
- Trigger/input: Lessons with start and duration values are rendered in the weekly grid.
- Access state: Authenticated.
- Observable result: Lesson height is proportional to duration; a 60-minute lesson appears twice the height of a 30-minute lesson.
- Failure and recovery: Invalid or unavailable duration data shall prevent a misleading duration rendering and require correction.
- Continuation: The student can select a lesson to edit its time or duration.
Page 20 of 23
FR-10 — Subject Colors
As a Student (schema owner), I should see subjects linked to recognizable colors so that I can scan my timetable quickly.
- Provenance: explicit.
- Access state: Authenticated.
- Required subject associations:
- Ma (Matematik): source color
#c3dcf8; dark-mode tuned color #7FC4FF.
- Sv (Svenska): source color
#f5f68d; dark-mode tuned color #F0F06B.
- En (Engelska): source color
#ffc7c7; dark-mode tuned color #FF9BA6.
- SO: source color
#e3d2c4; dark-mode tuned color #E8C9A6.
- Idh (Idrott och hälsa): source color
#d3dcee; dark-mode tuned color #A8BDF5.
- Sp (Spanska): source color
#b4eaff; dark-mode tuned color #6FE0FF.
- Rast: source color
#85875e; dark-mode tuned color #C9CC72.
- Lunch: source color
#838383; dark-mode tuned color #9EA6B0.
- NO: source color
#f5d2b2; dark-mode tuned color #FFB067.
- BG-samling / BG: source color
#bcfedd; dark-mode tuned color #6BFFD1.
- Extra studietid:
#C79BFF.
- Observable result: Lesson blocks use the subject’s saturated color treatment and remain vibrant against the dark background.
- Failure and recovery: Unknown or unavailable subject-color mapping shall use a clearly identifiable fallback treatment without changing the accepted subject mappings.
- Continuation: The student can view, select, or edit the lesson.
Page 21 of 23
FR-11 — Room and Teacher Information
As a Student (schema owner), I should add a room and teacher to a lesson so that I know where the lesson is and who teaches it.
- Provenance: explicit.
- Trigger/input: The student enters or selects room and teacher information while creating or editing a lesson.
- Access state: Authenticated.
- Observable result: The saved lesson shows its room and teacher in the schedule.
- Failure and recovery: Missing required information or save failure shall preserve input and guide the student to resolve it.
- Continuation: Room and teacher information becomes available for suggestions and friend matching.
FR-12 — Room and Teacher Suggestions
As a Student (schema owner), I should receive suggestions for previously added rooms and teachers so that I can add lessons faster.
- Provenance: explicit.
- Trigger/input: The student focuses or enters room or teacher information.
- Access state: Authenticated.
- Observable result: Previously saved rooms and teachers are available as selectable suggestions.
- Failure and recovery: If suggestion history cannot load, manual room and teacher entry remains available.
- Continuation: The student can save the lesson using suggested or newly entered values.
Page 22 of 23
FR-13 — Subject-Room-Teacher Memory
As a Student (schema owner), I should have room and teacher pairings remembered for lessons so that commonly used arrangements are suggested and alternate room pairings can also be saved.
- Provenance: explicit.
- Trigger/input: The student selects a subject and enters or selects room and teacher information.
- Access state: Authenticated.
- Required behavior:
- The application shall remember subject-room-teacher combinations.
- The application shall suggest known combinations, such as
BG → Hytt 5 → Karin Båvenäs.
- If the student enters another room, such as
Hytt 3, and no applicable teacher pairing is available, the application shall ask for teacher information.
- After save, the application shall remember both valid branches, such as:
BG → Hytt 5 → Karin Båvenäs
BG → Hytt 3 → Karin Båvenäs
- Observable result: The student receives relevant remembered pairing suggestions and can create additional remembered branches.
- Failure and recovery: If pairing memory cannot load or save, the application shall allow manual lesson entry and report the synchronization problem.
- Continuation: Saved pairings appear in future Lesson Editor and Bulk Add suggestions.
Page 23 of 23
FR-14 — Individually Managed Rooms and Floor Categories
As a Student (schema owner), I should add rooms individually and categorize them by floor so that room selection reflects my school layout.
- Provenance: explicit.
- Trigger/input: The student adds or edits a room in Rooms.
- Access state: Authenticated.
- Required categories:
- Entrance floor.
- Bryggan floor.
- Hytt floor.
- PReST floor.
- Observable result: The room is saved under its selected floor category and is available as a lesson-entry suggestion.
- Failure and recovery: The application shall identify missing room or floor-category input and preserve entered values for correction.
- Continuation: The student can use the room in lesson creation.
FR-15 — Bulk Lesson Addition with Preview
As a Student (schema owner), I should add multiple lessons through a normal GUI and preview where they will land so that I can create my schedule more quickly and accurately.
- Provenance: explicit.
- Trigger/input: The student enters multiple lesson rows in Bulk Add.
- Access state: Authenticated.
- Observable result: The application displays proposed lessons as preview blocks in their intended weekly day, time, and duration positions before confirmation.
- Failure and recovery: Invalid rows shall be marked without discarding valid draft rows. The student can correct rows and regenerate the preview.
- Continuation: The student confirms valid rows, and the resulting lessons appear in Kunskapsscheman.
FR-
No comments yet. Be the first!