Workspace reservations.
See available desks, reserve a room, and check in with an XL ambassador.
UNC–Chapel Hill · CSXL software · 2023–2026
Student contributions
to software used
by their department.
COMP423
Foundations of
Software Engineering
The July 2024 welcome page combines news, opening hours, reservations, and events.
Development screenshot with sample content, from Ajay Gandecha’s release PR.
Overview
The CSXL application handles coworking check-ins, room reservations, student organizations, events, and course office hours.
Much of this work began as team projects in COMP423: Foundations of Software Engineering. Students design and write software for themselves and their classmates. They work in an existing codebase, review each other’s changes, and test features that other people will use.
This page follows selected designs, contributors, and releases from the project’s start in 2023 through October 2026.
See available desks, reserve a room, and check in with an XL ambassador.
Find student organizations, their events, and event registration.
Find course office hours, describe a question, and follow a help ticket.
Apply for a teaching position, plan course staffing, and track hiring and onboarding.
A COMP590 software engineering pilot introduces the shared application.
Summer 2023Design of Design students propose interfaces for XL reservations.
2023–2024Student projects add organizations, events, room reservations, office hours, and applications.
2024 onwardLater contributors add recurring schedules, statistics, signage, and fixes.
01 / Spring 2023
I started the application in March 2023 for a COMP590 pilot of Foundations of Software Engineering. The course later became COMP423.
The initial codebase provided accounts, permissions, database access, and a development environment. It uses Angular and TypeScript in the browser, Python and FastAPI on the server, and PostgreSQL for storage.
Teams can build on the application’s accounts, permissions, and data models. They also have to read other people’s code and understand how their changes affect existing features.
For a room reservation, that means designing the interface, storing the booking, checking who can change it, and testing conflicting requests. A feature is complete when these parts work together.
March 11, 2023 / first commit ↗The shared development environment ↗
02 / Copenhagen · Summer 2023
Design of Design students proposed ways to book XL workspaces.
In Summer 2023, COMP590: Design of Design students in Copenhagen made Figma prototypes for desks, monitors, and group rooms. The June proposals covered availability, reservations, and check-in.
Students compared several approaches to the same task: choosing a seat on a floor plan, browsing available resources, or starting with a date and time. Each approach required decisions about what information to show and when to ask for it.



Summer 2023 class photographs by Kris Jordan. Open a photograph to view it full size.
Brynne Delaney · June 2023
Brynne’s design shows current capacity and available seats on a map. The group reservation form asks for the day, time, and number of people.
Individual seats and group bookings have separate flows, so each can ask for the information it needs.
Explore Brynne’s archived designsSanaa Dalvi · June 2023
Sanaa’s map shows desks, round tables, and named rooms, with availability and time labels beside them.
Students can choose a location in the room while checking whether it is available.
Explore Sanaa’s archived designsKeon Marcus · June 2023
Keon’s design lists available seated desks, standing desks, and other seats. Students choose a resource type before selecting a booking time.
The interface distinguishes reservable seats from first-come, first-served seating.
Explore Keon’s archived designsKatherine Bryan · June 2023
Katherine’s booking form filters rooms by date, time, and minimum capacity. A separate check-in screen provides a QR code and instructions to visit the ambassador.
The proposal covers both making the reservation and checking in when the student arrives.
Explore Katherine’s archived designsThese are June 2023 design proposals. Open a screen to view, zoom, or download its PNG. Production releases and implementation credits follow below.
The full collection also includes calendars, group membership, reservation changes, and ambassador views. Each student’s exported screens are collected in a full-resolution PNG. Open a sheet to zoom or download it; no Figma account is required.
Design considerations
The proposals address questions the software has to answer: what is available, how many people a room holds, when a booking is confirmed, and how an ambassador checks in the group.
03 / Fall 2023
Organization pages let students find clubs and contact information. The events feature lets organizations list activities, with registration added in a later release.
Ajay Gandecha, Jade Keegan, Brianna Ta, and Audrey Toney developed the organization and event features as COMP423 final project group A3.

October 2023
I added coworking drop-ins in October 2023 as the renovated Co-Lab came into use. Students could see available seats, request one, and check in with an ambassador.
The application tracks seated desks, standing desks, and communal seats separately, so students can check for the equipment or seating they need.

04 / March 2024
Team B8 added room bookings to the application.
Team B8’s Fall 2023 COMP423 project became the room reservation feature, merged on March 8, 2024. Aarjav Jain, John Schachte, Nick Wherthey, and Yuvraj Jain built a way to choose a room and adjacent time slots, confirm the reservation, and see it again later.
The feature records which room is booked, for what time, and by whom.

Jade Keegan’s review of the reservation PR raised questions a student would encounter in use: how to find upcoming reservations, how the grid would work on a phone, and whether the next action should say “Select” or “Reserve.”
Ajay Gandecha updated the interface to match the site’s Material conventions. Later changes fixed reservation conflicts; Yuvraj Jain extended the tests, and the feature’s documentation was expanded.
Team B8’s work and review / PR #250 ↗Interface refinements / #332 ↗Tests and documentation / #434 ↗
Show available rooms and time slots, and summarize the student’s selection.
Represent a draft and a confirmed reservation as different states.
Apply time limits and protect periods needed for office hours.
Save the reservation and reject a conflicting booking on the backend.
A reservation requires changes across the client, API, and database. The team’s specification documents these parts; the conflict-checking fix addresses overlapping bookings on the backend.
Client and server
A room reservation uses the browser, API, and database.
A feature can require changes to the Angular interface, Python API, application rules, and database. Separating these responsibilities helps teams find the relevant code and test each part.
Ajay Gandecha documented these layers in his November 2023 SQLAlchemy tutorial. Students can use the diagram and tutorial to trace a request from the interface to the database and back.
Angular’s router chooses the page. Components combine HTML, CSS, and TypeScript; frontend services send HTTP requests and bring the results back to the interface.
FastAPI routes handle HTTP. Pydantic models describe and validate API data. Backend services apply the application’s rules, keeping those decisions separate from the screen and the request.
SQLAlchemy sessions read and write PostgreSQL records through database entities. Services translate those entities into API models for the response. The database stores reservations between visits.
Why separate the layers? / Spring 2025 reading ↗API models and database entities ↗Ajay’s tutorial contribution / #173 ↗
COMP423 / Foundations of Software Engineering
Students prepare in a boot camp, then develop a feature in teams.
The first half of the course introduces the tools and architecture through readings, exercises, and pair work. In the second half, teams design, implement, test, and demonstrate a feature in an existing application.
The six topic areas below follow the Spring 2026 first-day objectives. The examples apply those goals to CSXL projects from earlier offerings.
01 / First half
Students practice source control, reproducible environments, testing, HTTP APIs, services, and database access.
They read unfamiliar code, work in pairs, make small changes, and check the results. In the CSXL offerings, this includes connecting an Angular and TypeScript client to a Python backend.
Spring 2026 lessons ↗Spring 2025 frontend and backend units ↗
02 / Second half
Six course topic areas
Ethics, professional roles, independent learning, evaluating tools, and taking responsibility for work produced with AI assistance.
Example: learn the code and tools needed for a feature, explain your decisions, and verify any generated code you keep.
Technical communication, pair programming, git branches and merges, issues, project boards, pull requests, and code review.
Example: agree on a booking API before dividing the work, then review the frontend and backend changes together.
Personas, requirements, user stories and epics, acceptance criteria, Figma wireframes, prototypes, scope, and trade-offs.
Example: define what a student and an ambassador each need to see when a room is booked or checked in.
Client/server communication, HTTP APIs, validation, dependency injection, services, relational data, ORM sessions and transactions, and cloud deployment.
Example: trace a booking from an Angular component through the API and service to its database records.
Modularity, architectural decision records, unit and integration tests, acceptance and end-to-end tests, mocks, fixtures, static analysis, and continuous integration.
Example: test successful bookings, time limits, conflicting requests, and the complete reservation workflow.
Dev containers, Docker, dependency managers and lockfiles, test runners, linters, debugging tools, coding agents, and review of generated code.
Example: start the dev container, reproduce an error, run checks, and inspect the change before submitting it.
The Fall 2024 project brief proposed work on opening-hours editing, group reservations, usage statistics, and organization memberships. In Spring 2025, simulated service responses helped teams get a first story working before connecting persistence and integrations. The final sprint emphasized quality and documentation for future developers.
Course objectives ↗CSXL feature design assignment ↗
Spring 2026’s feature project uses LearnWithAI. The CSXL examples here describe work from earlier offerings.
05 / 2024–2025
Students submit help tickets; course staff manage the queue.
Multiple student teams worked on early office-hours versions and later improvements. The implementation connects tickets to courses, staff, schedules, and rooms.
The selected releases below cover the May 2024 implementation, integration with My Courses, recurring schedules, and statistics.


Spring 2024
The May 2024 release added course office hours, student tickets, and staff queues. Students could describe their question, and staff could call a ticket to help the student.
May 15, 2024 release / #443 ↗Summer 2024
Ajay reimplemented office hours within My Courses, adding a student Get Help page and a staff queue. Course administration gained event editing and Canvas roster import.
Office hours in My Courses / #501 ↗ · Course administration / #504 ↗January–
February 2025
Staff could create a weekly series by choosing weekdays and an end date. The recurrence work also added deletion of a series and editing of either one event or that event and future occurrences.
Recurring dates / #652 ↗ · Update a recurring pattern / #683 ↗Spring–
Summer 2025
Ajay Gandecha, Jade Keegan, Mira Mohan, and Lauren Ferlito contributed ticket statistics, CSV exports, and roster links to student statistics. Benjamin Eldridge added notification sounds and title changes to alert students and staff.
Ajay and Jade also added configurable ticket cooldowns and daily limits. These controls give instructors a way to manage repeated requests for help.
Statistics / #739 ↗ · Roster tools / #748 ↗ · Notifications / #699 ↗ · Ticket limits / #649 ↗Recurring-date editor / October 2026
A staff member can choose Monday and Wednesday, a time range, and an end date to create a term’s office-hours meetings.
The implementation has to distinguish changes to one meeting from changes to the remaining series. Those are separate cases to represent in the interface and test in the backend.

Office hours gives later teams experience with maintenance: reading an existing implementation, preserving behavior that courses depend on, and adding features across the interface and backend.
06 / Other department features
Shared accounts, courses, rooms, and permissions also support teaching applications and lounge displays.
These features reuse the application’s data and authentication while adding interfaces for students, course staff, and department administrators.
December 2023 → July 2024
The academics feature introduced courses, section offerings, terms, and rooms. My Courses lists a student’s courses and provides access to each course’s office hours.
Ajay Gandecha developed academics and My Courses, which provided the course records used by later office-hours features.

April → July 2024
Ben Goulet added undergraduate teaching assistant applications in April 2024. The form collected student information and course preferences for the department’s hiring process.
In July, Ajay Gandecha reimplemented the forms and added graduate TA applications. The applications became the starting point for the department’s internal hiring and budget workflow.

March 2025
Andrew Lockard, Will Zahrt, and Audrey Toney built digital signage for the XL lounge. The display brings together seat and room availability, news, events, and office hours queues.
Students in the lounge can check this information on the shared display without opening the relevant pages individually.

07 / Summer 2024
The department uses this workflow every semester to manage instructional budgets over $500,000.
During summer 2024, Ajay Gandecha and I extended the application from collecting TA applications to reviewing candidates, planning course staffing, and tracking the steps needed to process hires.
Students apply through the same platform that instructors and department staff use to organize the hiring work.

Administrators can compare enrollment, planned staffing costs, and a coverage estimate across courses. Configurable hiring levels associate compensation and teaching load with each assignment. This gives the department a way to consider staffing needs and cost together.
Assignments move through Draft, Commit, and Final stages. A separate onboarding view lets staff track I-9 completion, position numbers, electronic personnel action references, and notes. CSV exports support the handoff to the people processing the hires.


July 2024
I added instructor application review to My Courses on July 16. Ajay added visible course preferences that day and extended the application forms to graduate TAs on July 20.
August 2024
Ajay built the hiring assignment and hiring level records, administration interface, and hiring summary. The combined release reached main on August 2. Our follow-up work improved HR onboarding, corrected coverage calculations, added conflict information, and gave instructors a summary of their assigned hires.
Administration / #550 ↗Hiring summary / #569 ↗HR view / #580 ↗Coverage / #584 ↗Conflicts / #588 ↗Instructor summary / #587 ↗
Later refinements
I improved onboarding pagination, filtering, and CSV ordering in January 2025, then added an export of all applicants that August. In August 2026, I added a confirmed, term-specific action to finalize committed assignments and limited instructor assignment views to finalized hires.
Pagination / #669 ↗Filtering / #670 ↗CSV ordering / #671 ↗Applicant export / #777 ↗Finalization / August 2026 ↗
08 / Design and maintenance
Contributors also updated the interface, upgraded dependencies, and documented the code. These changes help new teams understand the application and keep its features consistent.

Ajay Gandecha upgraded the site to Material 3 in June 2024. Later changes updated individual features to use the same interface conventions.
His July 2024 welcome page combined news, opening hours, reservations, and event registrations on one page.
Maintenance also included Angular upgrades. Ajay’s January 2026 refactor introduced Tailwind and restyled most components.
Material 3 / June 2024 / #493 ↗Welcome and news / July 2024 / #539 ↗Styling refactor / January 2026 / #826 ↗
Feature specifications describe behavior and implementation decisions. Ajay Gandecha’s tutorials and architecture diagram explain how the application’s layers connect.
Branches and pull requests let contributors discuss behavior, tests, and integration before merging a change.
Bug fixes, clearer errors, tests, and component refactors are also project work. Students practice improving code they did not originally write.
Branching and review practices ↗Learning through the application ↗Contributing guide ↗
Using and contributing to the application
The application supports students, XL ambassadors, course staff, and department administrators.
Its source code, design references, and documentation also give students an application to study and extend.
Check coworking availability and reserve shared rooms.
Browse student organizations and register for events.
Find course office hours and follow a help ticket.
Manage queues, recurring schedules, rosters, and ticket statistics.
Submit a UTA or GTA application through the department’s hiring workflow.
Review applicants, plan staffing and instructional budgets, and track assignments through onboarding.
This is a selected history of the CSXL application through October 2026. Release dates describe changes merged to the repository’s main branch; they do not imply every capability was immediately in use by every course. Dates are presented in US Eastern time.
The student names beside the Copenhagen designs come from the course’s submission archive. All 16 files were reviewed, and their exported screens are hosted here as PNG sheets at their original export resolution. Smaller WebP images serve as previews. The screens show proposals and placeholder data.
The separate XL Coworking Application wireframes and shared CSXL design template were supplied by Kris Jordan. Individual authorship of those two files is not assigned here. The student proposals are not presented as a one-to-one account of authorship of the later production code.
The architecture diagram is Ajay Gandecha’s original client/server diagram with SQLAlchemy, introduced in PR #173 on November 17, 2023. The diagram is available as a full-resolution PNG, with smaller WebP previews. It is a teaching diagram from that period, including its CloudApps hosting label.
The Fall 2024 and Spring 2025 course materials document project prompts and learning expectations. The course examples describe assignments and proposals; the release history identifies merged features.
The course overview follows the six threads and two-phase structure in the Spring 2026 first-day slides. Topic details draw on that offering’s lessons on tools and code review, testing, API design, ORMs and transactions, and Angular frontend development. The CSXL applications of those topics are illustrative examples; Spring 2026’s feature platform is LearnWithAI.
The hiring section follows the July and August 2024 releases and later changes linked beside the narrative. The August 2 administration release credits Ajay Gandecha and Kris Jordan; Ajay’s hiring summary was merged into that release before it reached main. This summer work extended the earlier student application feature and is not presented as a COMP423 team assignment.
The hiring screenshots show the local October 2026 frontend with sample API responses. Names, identifiers, decisions, rates, enrollment, assignments, and costs are entirely illustrative. The department’s semester budget scale describes its use of the software, not the figures in these screenshots. No personnel records were loaded or edited for the captures.
Original development screenshots are preserved from the linked PRs and repository specifications. They show sample content. The welcome image omits the browser chrome; selected office-hours views are cropped to the relevant application content.
The October 2023 coworking view is recreated from 33f0934; the March 2024 reservation view from b13e6dd; and the October 2026 My Courses and recurring-date views from 9cc2433. These historical frontend builds were run and captured in 2026 with sample API responses. Their data is illustrative, not a record of occupancy, reservations, or enrollment.
The Co-Lab drone footage and August 2023 preview photograph are reused from the space retrospective. Kris Jordan identified the film as drone footage recorded inside the Co-Lab. This narrative highlights selected contributions. The student contributor credits follow below, and the repository history records further details. The source is MIT licensed.
Credits / 2023–2026
These students contributed features, tests, documentation, fixes, and maintenance to the CSXL codebase. Their work includes course projects and development that continued after the course.
Each name links to their GitHub profile.
Ordered by cumulative changes in the merged history through October 19, 2026, with shared work and duplicate identities reconciled.
The order uses additions and deletions in source code, tests, documentation, and configuration in the October 19, 2026 snapshot. Dependency lockfiles and binary files are excluded. Each non-merge commit is counted once; shared changes are allocated equally among its credited human contributors.
Author names, coauthor records, and original merged PR commits were checked to recover team credits lost in squash merges. Repeated names, handles, and author identities are combined into one person. GitHub profiles were verified on October 22, 2026. These credits cover contributions to the merged codebase; the Copenhagen design credits appear beside the archived student proposals.