Skip to content

Apps

Academy District 20 provides three standalone web apps for experiences that are shared across district and school websites: Calendar, Directory and School Directory. Each app has its own public address and code repository, but all three use CommCenter-managed data and shared website services.

AppPublic addressPrimary purpose
Calendarcalendar.asd20.orgDistrict and school event calendars, annual calendars and calendar sync status.
Directorydirectory.asd20.orgTeams, staff search, profiles, organization contact information and public contact forms.
School Directoryschools.asd20.orgSchool and program discovery, school details, attendance boundaries and interactive maps.

These are public Vue applications hosted separately from CommCenter and the main website. They use shared components from @asd20/ui-next so their layout, controls and notifications remain consistent with other ASD20 web properties.

Shared Data and Functions Pattern

The apps use two primary back-end paths:

  • Hasura provides structured CommCenter data such as organizations, calendar subscriptions, teams, offerings, profiles and published program content.
  • Azure Functions provide browser-safe access to Azure Search and other protected services. The apps know the Functions base URL through FUNCTIONS_ENDPOINT; Azure Search keys and downstream delivery credentials remain server-side.

All three apps use the /api/search/messages Function to retrieve notifications for the current host. The Calendar and Directory apps also use additional Functions for their core search or submission workflows.

See Back-End Functions for the complete Functions inventory.

Calendar

The Calendar app presents events from district and school calendar subscriptions. Visitors can:

  • select a district or school organization
  • view events in monthly grid or list formats
  • search event titles and filter by calendar or category
  • view printable annual calendars and download annual-calendar PDFs when available
  • review calendar synchronization status
  • receive website notifications

CommCenter and Hasura provide the organization list, subscription definitions and sync-job history. The public app does not connect to Outlook, iCal sources or Azure Search directly.

Functions interactions

FunctionInteraction
httpSearchEvents/api/search/eventsThe app sends its selected calendars, date range, search terms and filters to this route. The Function queries the event index and returns the events displayed in monthly and annual views.
httpSearchMessages/api/search/messagesThe app polls this route for notifications that match the calendar host and configured notification channels or destinations.
httpCalendarSubscriptionSync/calendar-subscriptions/syncThis upstream job reads each configured iCal or Microsoft Graph calendar and refreshes its events in the search index. The app does not call it during normal browsing, but its event results depend on successful syncs.
httpCalendarSubscriptionHasuraTrigger/calendar-subscriptions/hasura-triggerWhen an administrator changes a subscription, this Function maintains the Hasura cron schedule that starts future syncs.
httpListGraphCalendars/calendar-subscriptions/graph-calendarsCommCenter uses this Function—not the public Calendar app—to help administrators select a Microsoft Graph calendar ID during subscription setup.

The event flow is: an administrator configures a subscription in CommCenter, the sync Functions import its events into Azure Search, and the Calendar app retrieves those indexed events through httpSearchEvents.

See Calendars for subscription administration.

Directory

The Directory app provides organization, team and employee information. Visitors can:

  • select the district or a school
  • browse teams and departments
  • open team detail pages and view team members
  • search and filter public staff profiles
  • view person details
  • view organization contact and location information
  • send a message to an employee without exposing downstream email-service credentials
  • open a school's boundary map supplied by the School Directory app
  • receive website notifications

The app reads organizations, teams and team membership directly from Hasura. People search uses an Azure Search index because it must support keyword search, organization filters and job-type facets across many profiles.

Functions interactions

FunctionInteraction
httpSearchPeople/api/search/peopleThe app sends staff keywords, organization and job-type filters to this route. The Function queries the people index and returns matching public profiles and facets.
httpSearchMessages/api/search/messagesThe app polls this route for notifications that match the directory host and configured notification criteria.
httpSendDirectoryEmail/api/directory/emailThe public contact form sends the recipient ID, sender information, subject, message and CAPTCHA token to this route. The Function validates the recipient, applies CAPTCHA, rate limits and moderation, records the outcome and relays accepted messages.
httpUpdateEmployees/update-employeesThis scheduled upstream job refreshes the employee snapshot that contributes job, organization, office and contact information to directory profiles.
httpIndexAllPeople/index-all-peopleThis upstream job rebuilds the people search index from profiles, employee records, organizations and team relationships.
httpUpdateSearchDocument/update-search-documentHasura change events use this Function to update supported search documents and relationship fields between full index rebuilds.

The Directory app also embeds /embed/school/{abbreviation} from the School Directory app on organization location pages. That map is an app-to-app dependency rather than an Azure Functions call.

See Profiles, Teams / Departments and Analytics & Reporting for the related administrative data and email reporting.

School Directory

The School Directory app helps families explore schools, programs and attendance areas. Visitors can:

  • browse and search schools
  • filter schools by education level, offering, program or distance
  • view school and program detail pages
  • search by address or use the browser's current location
  • identify schools serving a location
  • view school boundaries, walking zones and neighboring districts on an interactive map
  • use embeddable school maps displayed by the Directory app and other websites
  • receive website notifications

The app loads organizations, offerings, boundary data and published program-description messages from Hasura. School and program filtering happens in the browser after that data loads. Address lookup uses OpenStreetMap Nominatim, while Leaflet and Turf provide map display and geographic matching.

Functions interactions

FunctionInteraction
httpSearchMessages/api/search/messagesThe app polls this route for notifications that match the schools host and configured notification criteria. This is the School Directory app's only direct dependency on the CommCenter Azure Functions app.

School search itself does not call /api/search/pages, /api/search/people or another Azure Search Function. It searches the Hasura-loaded school and program data locally. The app's /api/directions hosting proxy forwards walking-direction requests to the existing boundary service; it is not a route in asd20-commcenter/functions.

See Schools / Organizations and Organization Offerings for the CommCenter records that drive this app.

Dependency Summary

AppDirect Functions dependenciesImportant upstream Functions
CalendarEvent search and message/notification searchCalendar schedule maintenance and calendar synchronization
DirectoryPeople search, message/notification search and directory emailEmployee refresh and people/search-document indexing
School DirectoryMessage/notification searchNone for its core school, program or map data; those paths use Hasura and app-owned logic

Troubleshooting Boundaries

When an app displays incomplete or stale information, first identify which layer owns the missing behavior:

ProblemStart with
Calendar subscription or sync status is wrongCommCenter calendar configuration, Hasura subscription/job records and the calendar sync Functions.
Calendar filters work but events are missinghttpSearchEvents and the Azure Search event index.
A team or organization is missing from DirectoryCommCenter/Hasura organization and group data.
A person is missing from Directory searchEmployee/profile data, then the people indexing Functions and httpSearchPeople.
A directory message failsEmail Reporting and httpSendDirectoryEmail validation, moderation or delivery status.
A school, program, offering or boundary is wrongCommCenter/Hasura data and the School Directory's client-side filtering or map logic.
Notifications are missing from any appFUNCTIONS_ENDPOINT, notification configuration and httpSearchMessages.